[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

在用Navicat写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

具体看图:
在这里插入图片描述
首先来看错误提及的sql_mode=only_full_group_by的值的含义:
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中
因为有only_full_group_by,所以我们要在MySQL中正确的使用group by语句的话,只能是select column1 from tb1 group by column1(即只能展示group by的字段,其他均都要报1055的错)
所以我们要使用能正确的使用group by 的话就必须删除掉only_full_group_by

以下是具体操作:
以管理员身份进入DOS命令窗口,输入net start mysql命令启动MySQL:

C:\WINDOWS\system32>net start mysql

输入mysql -hlocalhost -uroot -p命令进入MySQL:

C:\WINDOWS\system32>mysql -hlocalhost -uroot -p

输入select @@global.sql_mode;命令查看SQL设置:

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

通过查询结果,确定有ONLY_FULL_GROUP_BY,接下来就是要去掉它,以下是通过网上查询到的能够成功解决的方法,但亲自尝试后,却均未能成功,如有有兴趣的,可以尝试一下,没有兴趣的可以直接看方法3。

方法1(未成功):
输入set sql_mode=(select replace(@@sql_mode,‘ONLY_FULL_GROUP_BY’,’’));命令进行设置:

mysql> set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Query OK, 0 rows affected (0.00 sec)

此命令执行没有问题,但通过查询却是发现并没有将ONLY_FULL_GROUP_BY通过替换方式去掉:

mysql> select @@global.sql_mode;
+-----------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

方法2(未成功):
输入set @@global.sql_mode = ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;命令进行设置:

mysql> set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

错误显示’sql_mode’不能被设置’NO_AUTO_CREATE_USER’值。
通过对比发现,在原有的’sql_mode’值中,也并不存在’NO_AUTO_CREATE_USER’这个值,于是便对设置命令进行了删减。

方法3(成功):
输入set @@global.sql_mode = ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’;进行设置:

mysql> set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)

执行成功。

再通过select @@global.sql_mode;查询配置,得到的结果显示已经将‘ONLY_FULL_GROUP_BY’去除:

mysql> select @@global.sql_mode;
+----------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                  |
+----------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

根据查询结果,证明已经修改成功。

补充:
这种修改方式只是暂时性的修改,永久修改可以更改配置文件my.ini
sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

注意:
1、在网上查到的sql_mode配置中,大多包含有NO_AUTO_CREATE_USER,但如果在设置时出现方法2的错误提示,那在my.ini文件中进行更改配置时,也不要加NO_AUTO_CREATE_USER,否则在打开MySQL服务器时,就会提示MySQL服务器无法启动,服务没有报告任何错误:
在这里插入图片描述
相信我,这绝对是一个大坑,博主在查询解决服务器无法启动的解决方法时,发现有各种情况,比如端口被占用之类的,结果尝试了各种操作,浪费了大量时间,才因为一个突发的灵感,将my.ini中设置的NO_AUTO_CREATE_USER去掉,然后问题成功解决。
真的,当时真有点百感交集。

2、更改配置时,一定要放在[mysqld]下面,因为还有一个[mysql],这两者很容易混淆,如果不是放在[mysqld]下面,在启动MySQL的时候就会报以下错误:

C:\WINDOWS\system32>mysql -hlocalhost -uroot -p
mysql: [ERROR] unknown variable 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'.

也就是说,找不到这个配置了。

注意事项很重要,真要是忽略了,找问题将会非常麻烦,浪费大量时间,搞不好还会直接崩溃,后果极其严重,嗯,这些博主正好都经历了,教训可谓惨痛,请以此为鉴。

另,附解决问题后再使用Navicat写MySQL命令的效果:
在这里插入图片描述
话说,没有错误提示看着真舒服!

  • 13
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
、和[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 ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值