问题复现:
执行查询SQL:SELECT * FROM employees GROUP BY department_id
出现这个报错的原因是,在mysql8及以上默认使用sql_mode=only_full_group_by,在ONLY_FULL_GROUP_BY这种模式下:对于GROUP BY聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。
也就是说对于上面的查询我得写成这样:SELECT department_id FROM employees GROUP BY department_id
那么如何解决呢?经过一番操作(百度)后,得以解决,但是发现网上好多教程没有经过操作实践验证就写上了(笑哭.jpg)。以下两种方式我都验证过:
第一种方式:使用命令
#修改全局 于新建的数据库有效。
mysql> SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
#修改当前设置 对于已存在的数据库,则需要在对应的数据下执行:
mysql> SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
注意:mysql8没有NO_AUTO_CREATE_USER这个模式;还有就是这种方式有个缺陷数据库每次重启都会恢复到之前的模式
第二种方式:修改配置文件
在配置文件my.conf(linux下是/etc/my.cnf)中 修改 :
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
重启服务器,大功告成!