一切福田,不離方寸,從心而覓,感無不通。

MySQL:SELECT list is not in GROUP BY clause 报错 解决方案

一、前言

一大早上测试环境,发现测试环境的MySQL报错了。

二、解决方案

官方文档中提到:
在这里插入图片描述

大致意思:
用于GROUP BY的SQL / 92标准要求满足以下条件:

  • SELECT子句的表达式中使用的列必须在GROUP BY子句中。否则,使用该列的表达式是一个聚合函数。
  • GROUP BY表达式只能包含选择列表中的列名,而不能仅用作向量聚合的参数。
  1. 首先执行以下查询:
    不出所料就是有一个ONLY_FULL_GROUP_BY

 

所以我去到配置文件中,在 mysqld 下配置一下 sql_mode,把 ONLY_FULL_GROUP_BY 去掉

 

重启MySQL即可!

可以参考我之前写的一篇文章了解sql_mode中的每个项的意思:点此跳转链接

三、起因分析

起因是昨天修改一个数据表的结构保存失败出现了报错:

 

这个错误导致我删除表也删不掉,备份数据库也不行,烦死了。
然后翻遍谷歌,
我做了以下尝试:

  1. 删除MySQL data目录下对应表的 .ibd 文件,重启MySQL,再去Navicat那边删除对应的表,失败!
  2. 修改配置项innodb_file_per_table=0,重启,执行过以下命令,失败

 

无论我怎么操作,Navicat那边还是看到那个数据表
无奈只能先把 innodb_file_per_table=1 设置回来了,重启之后没检查,只看了Navicat中操作的表都没问题,没注意看web应用程序查询是否正常。所以早上来了才发现标题中提到的这个错误。

我这个 Tablespace is missing for table database/crm_bid_deposit. 错误看来只能是等周末再一个个表导出来重建数据库了。有没有人有解决方案,救救我~

 

from:https://blog.csdn.net/qq_17229141/article/details/139821429