一大早上测试环境,发现测试环境的MySQL报错了。
1 |
SELECT list is not in GROUP BY clause and contains nonaggregated column |
官方文档中提到:
大致意思:
用于GROUP BY的SQL / 92标准要求满足以下条件:
- SELECT子句的表达式中使用的列必须在GROUP BY子句中。否则,使用该列的表达式是一个聚合函数。
- GROUP BY表达式只能包含选择列表中的列名,而不能仅用作向量聚合的参数。
ONLY_FULL_GROUP_BY
1 2 |
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
去掉
1 2 |
# 添加的行如下 sql_model=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
重启MySQL即可!
可以参考我之前写的一篇文章了解sql_mode
中的每个项的意思:点此跳转链接
起因是昨天修改一个数据表的结构保存失败出现了报错:
1 |
1812 - Tablespace is missing for table database/crm_bid_deposit. |
这个错误导致我删除表也删不掉,备份数据库也不行,烦死了。
然后翻遍谷歌,
我做了以下尝试:
.ibd
文件,重启MySQL,再去Navicat那边删除对应的表,失败!
innodb_file_per_table=0
,重启,执行过以下命令,失败
:
1 2 3 4 |
SET FOREIGN_KEY_CHECKS=0; ALTER TABLE wk_crm_table.wk_crm_bid_deposit DISCARD TABLESPACE; ALTER TABLE wk_crm_table.wk_crm_bid_deposit IMPORT TABLESPACE; REPAIR TABLE wk_crm_bid_deposit; |
无论我怎么操作,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