0


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

一、前言

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

SELECT list is not in GROUP BY clause and contains nonaggregated column

二、解决方案

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

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

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

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

所以我去到配置文件中,在

mysqld

下配置一下

sql_mode

,把

ONLY_FULL_GROUP_BY

去掉

# 添加的行如下
sql_model=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启MySQL即可!

可以参考我之前写的一篇文章了解

sql_mode

中的每个项的意思:点此跳转链接

三、起因分析

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

1812 - Tablespace is missing for table database/crm_bid_deposit.

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

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

REPAIR TABLE wk_crm_bid_deposit;

无论我怎么操作,Navicat那边还是看到那个数据表
无奈只能先把

innodb_file_per_table=1

设置回来了,重启之后没检查,只看了Navicat中操作的表都没问题,没注意看web应用程序查询是否正常。所以早上来了才发现标题中提到的这个错误。

我这个

Tablespace is missing for table database/crm_bid_deposit.

错误看来只能是等周末再一个个表导出来重建数据库了。有没有人有解决方案,救救我~

标签: mysql 数据库 docker

本文转载自: https://blog.csdn.net/qq_17229141/article/details/139821429
版权归原作者 落魄程序员在线炒粉 所有, 如有侵权,请联系我们删除。

“MySQL:SELECT list is not in GROUP BY clause 报错 解决方案”的评论:

还没有评论