MySql问题集锦

背景

以前mysql的相关问题较散, 自此以后小问题均聚合到该文进行记录.

问题

5.7.5后, group by报错问题

问题描述

升级mysql后, 之前的sql语句报错, 报错信息如下:

1
ERROR 1055 (42000): Expression #1 of SELECT name is not in GROUP BY clause and contains nonaggregated column 'database.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

经查询是由于5.7.5后的版本, sql_mode默认增加了ONLY_FULL_GROUP_BY, 该模式的作用如下:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面。

查询指令

  • 查询版本: select version();
  • 查询global sql_mode: select @@GLOBAL.sql_mode;
  • 查询session sql_mode: select @@SESSION.sql_mode;

解决方案

立即生效, 重启后消失

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';

重启后生效

1
2
3
vim my.cnf
# 找到[mysqld]和[mysql]节点, 在其下添加如下语句
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

转载

本文出自<<arccode>>, 欢迎转载, 转载请注明出处.