ONLY_FULL_GROUP_BY遇到的坑

在MySQL 5.7版本中,默认开启的ONLY_FULL_GROUP_BY模式导致了一次报错,该模式确保了查询结果的语义正确性,但可能与某些查询需求冲突。为了解决这个问题,可以采取临时关闭或修改配置文件来禁用此模式,如通过修改/etc/my.cnf文件来持久化设置。
摘要由CSDN通过智能技术生成

上一篇文章 提到的需求上线后出现如下报错:

org.springframework.jdbc.BadSqlGrammarException:
… Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘p.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

经过调研发现线上的mysql使用的是5.7版本,默认是开启ONLY_FULL_GROUP_BY
ONLY_FULL_GROUP_BY模式代表什么?为什么5.7版本要默认开启该模式呢?如何解决这个问题呢?带着这些问题开始了探索。

  1. ONLY_FULL_GROUP_BY模式代表什么?
    根据报错信息我们知道它是sql_mode的一个值,sql_mode的常用值如下,第一个便是我们关注的ONLY_FULL_GROUP_BY。
ONLY_FULL_GROUP_BY: 
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO: 
该值影响自增长列的插入。默
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值