MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr

文章目录

  • 问题描述
  • 解决方法
    • 问题原因及基本思路
    • 解决步骤
      • 1. 找到自己Mysql的安装位置
      • 2. 修改 my.ini 配置文件
      • 3. 重启MySql服务以生效配置
    • 验证问题解决

问题描述

更新MySql表中的一行数据时遇到这样一个报错:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY
clause and contains nonaggregated column
‘information_schema.PROFILING.SEQ’ which is not functionally dependent
on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by

截图:
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第1张图片

解决方法

网上搜索了有很多类似的解决方案,但本人使用后都没有解决。
如:https://blog.csdn.net/u012187452/article/details/82120345/ 、https://blog.csdn.net/baidu_36882394/article/details/105736059等。
这些文章的方案思路是对的,只是没有给出完整的解决过程。接下来我来补充下完整详细的方法。如果帮到了你,请一键三连支持下我的文章!

问题原因及基本思路

该问题的原因是 sql_mode不兼容,因此基本思路是修改本机所安装mysql的sql_mode,也就是把报错中 sql_mode=only_full_group_by去掉 only_full_group_by这种mode即可。

解决步骤

1. 找到自己Mysql的安装位置

如果你知道自己的Mysql安装位置那么直接到文件夹打开即可。
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第2张图片
如果不知道,可通过下面方式查询:
在mysql查询软件中执行sql语句如下图
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第3张图片
上述执行mysql语句的软件是传统的mysql配套查询工具:Navicat Premium
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第4张图片
如果你还没有且想要的话,可关注并私信我获取。

2. 修改 my.ini 配置文件

用记事本打开my.ini文件,在 [mysqld] 下面添加sql_mode的配置语句:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

注意:

  • 这行sql_mode配置一定要在 [mysqld] 下方,而不是 [mysql] 或 [client]下方,否则无效!

  • 这行配置的内容因人而异,上述只是我本机的配置。可能我的配置应用到你电脑上也可以解决问题,但也可能遇到无法重启mysql服务的情况。我就是复制了上述其他文章中的配置出现了该情况。
    那么,如何获取适合自己电脑的sql_mode配置呢?你需要先查询自己的sql_mode,然后去除only_full_group_by即可。如下图:
    MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第5张图片
    查询结果显示,当前我电脑的sql_mode是:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    因此,在此基础上去掉 ONLY_FULL_GROUP_BY
    结果是:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    这就是正确的sql_mode配置的由来!

附上我完整的my.ini供你参考吧:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:/MySQL/mysql-8.0.28-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:/MySQL/mysql-8.0.28-winx64/data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

3. 重启MySql服务以生效配置

很多文章到上面修改完配置就结束了,也不讲修改完还需要怎么做才生效,导致新手因修改完配置后还是无法解决问题而苦恼。还以为是自己配置修改的不对呢!其实只需要最后重启mysql服务,让服务重新读取my.ini配置就好了。

那么如何重启mysql服务呢?有很多方式,有的mysql配套软件里就有个按钮一键重启。当然了你需要下载那种软件,太麻烦了。这里分享一种最朴素的也是最适用的方法吧。

高端的食材往往只需要用最简单的烹饪手法。

执行mysql命令:关闭mysql服务,再启动mysql服务

以管理员的方式打开命令提示符。

啥?命令提示符也找不到在哪?

没办法,看下图吧,谁让咱是保姆级教学呢?
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第6张图片
切记这里以管理员身份运行,否则可能会遇到无权限的问题。

运行后,弹出我们熟悉的黑框窗口,在里面执行命令:

关闭当前mysql服务:

net stop mysql

启动mysql服务:

net start mysql

如此,便是一次重启mysql的过程。
MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第7张图片


验证问题解决

再次执行之前的mysql语句,会发现,问题解决了!

MySql错误:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggr_第8张图片

你可能感兴趣的:(问题解决,其他,mysql,adb,数据库)