Mysql设置only_full_group_by

背景:

MySQL 5.7版本开始启用ONLY_FULL_GROUP_BY,主要是为了避免查询selelct语句当中出现语义不明确的列,对于一些比较严谨的语义来说它的作用相当重要。

Mysql定义:

ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式。

所以简单的说 一旦设置ONLY_FULL_GROUP_BY启用,那么使用group by 语句时,你的输出语句当中只能是使用了聚合函数的字段和group by的字段,若有其他不明确的字段则报错。

举个栗子:有个user表,拥有字段 name,phone

select name from user group by name;

这条语句时不会报错的
但是添加了其他不明确的字段(phone)则出问题了

select name, phone from user group by name;

除非给其他字段使用一些聚合函数 如下:

select name, GROUP_CONCAT(phone)  from user group by name;

查看only_full_group_by配置

select @@global.sql_mode

1、本次mysql服务启用only_full_group_by配置,暂时性的启用 停止服务再开启则失效

set global sql_mode='ONLY_FULL_GROUP_BY';

2、永久开启ONLY_FULL_GROUP_BY则使用配置文件进行配置

[mysqld]  
sql_mode=ONLY_FULL_GROUP_BY

注:如有其他参数使用英文逗号隔开。
修改完成保存后,重启mysql服务即可

你可能感兴趣的:(Mysql设置only_full_group_by)