关于安装MySQL5.7,用group by 查询时抛出如下异常:SELECT list is not in GROUP BY clause and contains ....

1、我在云服务器安装MySQL5.7,用group by 查询时抛出如下异常:

Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'a.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

2、查了原因是因为:

   从MySQL 5.7.5开始,默认的SQL模式包括ONLY_FULL_GROUP_BY。(在5.7.5之前,MySQL不会检测到功能依赖性,并且默认情况下未启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见《 MySQL 5.6参考手册》。)
   MySQL对标准SQL的扩展允许在HAVING子句中引用选择列表中的别名表达式。在MySQL 5.7.5之前,启用ONLY_FULL_GROUP_BY会禁用此扩展,因此要求使用无别名表达式编写HAVING子句。从MySQL 5.7.5开始,取消了此限制,以便HAVING子句可以引用别名,而不管是否启用了ONLY_FULL_GROUP_BY。

在云服务器上登录mysql,命令行输入:mysql -uroot -p

[root@root~]# mysql -uroot -p

输入密码后,按下回车键即可。出现以下界面表示登录成功!

执行以下个命令,可以查看 sql_mode 的内容。

mysql> SHOW GLOBAL VARIABLES;
mysql> SHOW SESSION VARIABLES;
mysql> select @@sql_mode;

前两句可以发现session和global 的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

输入这个select @@sql_mode; 出现这个界面:

 

3、解决办法

在登录mysql的状态下执行以下两个语句:

mysql> 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'; 
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

输入这两个命令,就可以去掉 sql_mode 的 ONLY_FULL_GROUP_BY了,这样问题就解决啦。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值