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

问题描述

更新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

截图:
报错截图

解决方法

网上搜索了有很多类似的解决方案,但本人使用后都没有解决。
如: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安装位置
如果不知道,可通过下面方式查询:
在mysql查询软件中执行sql语句如下图
查询mysql位置
上述执行mysql语句的软件是传统的mysql配套查询工具:Navicat Premium
Navicat软件
如果你还没有且想要的话,可关注并私信我获取。

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即可。如下图:
    查询本机sql_mode
    查询结果显示,当前我电脑的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服务:

net stop mysql

启动mysql服务:

net start mysql

如此,便是一次重启mysql的过程。
重启mysql


验证问题解决

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

问题解决了

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
、和[3]引用的内容都是关于MySQL报错1055的问题。这个错误是由于在使用ORDER BY子句时,ORDER BY子句中的列没有在GROUP BY子句中,并且包含了不是在GROUP BY子句中的列,这与sql_mode=only_full_group_by选项不兼容所导致的。换句话说,这个错误是由于使用了不合法的ORDER BY子句。 要解决这个问题,可以有以下几种方法: 1. 修改SQL查询语句,确保ORDER BY子句中的列都在GROUP BY子句中,并且不包含不在GROUP BY子句中的列。这样可以确保查询语句符合sql_mode=only_full_group_by选项的要求。 2. 修改MySQL配置文件,将sql_mode选项中的only_full_group_by选项去掉。这样可以关闭只允许全面GROUP BY的模式,但需要注意这可能会导致其他潜在的问题。 3. 升级MySQL版本到5.7.5或更高的版本。从MySQL 5.7.5开始,sql_mode=only_full_group_by成为默认设置,不再允许ORDER BY子句中的非聚合列。 请根据具体情况选择适合的解决方法来解决[Err] 1055的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL异常:[Err] 1055Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona...](https://download.csdn.net/download/weixin_38742656/13685329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated...](https://blog.csdn.net/miachen520/article/details/122390084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains](https://blog.csdn.net/qq_43514711/article/details/122041247)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值