MySQL5.7默认已经设置了ONLY_FULL_GROUP_BY。
sql_mode设置是否允许一些非法操作,比如允许一些非法数据的插入,数据查询等。
在生产环境必须将这个值设置为严格模式,所以开发、测试、生产环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。
全局的sql_mode
select @@GLOBAL.sql_mode;
会话级别sql_mode
select @@SESSION.sql_mode;
mysql 5.7的sql_mode=有ONLY_FULL_GROUP_BY
说明:在查询的时候,使用group by要遵行一定的规则
a.查询项 必须是分组字段其中之一
b.查询项 可以有组函数(max.avg.min...)的出现
综上所述:
使用group by进行分组的时候,查询项目,要么是组函数,要么是分组的字段
SET GLOBAL sql_mode = 'modes...';
SET SESSION sql_mode = 'modes...';
[mysqld]
#set the SQL mode to strict
#sql-mode="modes..."
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"
show variables like ‘sql_mode’;
sql_mode常用值如下:
set sql_mode='ONLY_FULL_GROUP_BY';