在MySQL5.7及以上的版本中,如果使用那个group by会产生一个异常:
Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.t_long.user_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
是因为5.7及以上的版本中增加了一个group by校验的功能,那么如何关闭这个功能,使数据库能正常使用group by方法呢?
首先我们可以运行如下命令查看sql_mode
SELECT @@sql_mode;
那么控制台的输出为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
我们的目的就是将前面的ONLY_FULL_GROUP_BY,去掉。
在MySQL的文件夹根目录下,有一个文件my.ini,(windows下为my.ini ,在linux下为my.cnf),打开,在[mysqld]下方找sql_mode这一个值,将其改为STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
如果没有,则在[mysqld]下方,手动添加sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
注意,一定是在[mysqld]下方操作,否则无效。
然后重启MySQL:
在命令行模式下,关闭MySQL:输入net stop mysql
再打开MySQL:输入net start mysql
如此,别能正常使用group by 命令。