技术文摘
MySQL 5.7 中使用 group by 语句遭遇 1055 错误问题
MySQL 5.7 中使用 group by 语句遭遇 1055 错误问题
在 MySQL 5.7 的使用过程中,不少开发者会遇到使用 group by 语句时抛出 1055 错误的情况。理解并解决这个问题,对于高效开发和数据库的稳定运行至关重要。
1055 错误通常提示 “Expression #n of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx' which is not functionally dependent on columns in GROUP BY clause”。简单来说,就是在 SELECT 子句中的某些列没有出现在 GROUP BY 子句中,并且它们也没有使用聚合函数。
出现这个错误的根本原因在于 MySQL 5.7 的 sql_mode 配置。在默认的 sql_mode 下,ONLY_FULL_GROUP_BY 模式被启用。这一模式要求 SELECT 子句中的所有非聚合列都必须出现在 GROUP BY 子句中,以确保查询结果的确定性。
要解决这个问题,有几种可行的方法。可以修改 sql_mode,将 ONLY_FULL_GROUP_BY 模式移除。通过修改 MySQL 的配置文件(通常是 my.cnf 或 my.ini),找到 sql_mode 配置项,移除 ONLY_FULL_GROUP_BY。例如,将原来的 “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” 修改为 “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 服务使配置生效。
不过,移除 ONLY_FULL_GROUP_BY 模式可能会导致查询结果不唯一,存在不确定性。所以,更好的做法是对查询进行优化。确保 SELECT 子句中的非聚合列要么出现在 GROUP BY 子句中,要么使用聚合函数。比如,原查询 “SELECT column1, column2 FROM table1 GROUP BY column1;” 如果 column2 没有使用聚合函数,就会报错。可以修改为 “SELECT column1, MAX(column2) FROM table1 GROUP BY column1;”,通过聚合函数使查询符合 ONLY_FULL_GROUP_BY 模式的要求。
在 MySQL 5.7 中处理 group by 语句的 1055 错误,需要我们深入理解 sql_mode 的影响,并通过合理的配置或查询优化来解决问题,以保障数据库操作的准确性和稳定性。
TAGS: MySQL 5.7 MySQL错误处理 group by语句 1055错误
- Intel AVX-512 指令集重获生机!小核心亦可运行
- 转转门店商详页异步编程实践探索
- 常见的五种服务器部署策略
- Emacs 打开 Git 仓库中多个子工程根目录的解决方案
- 美团面试官常考问题:你能否判断链表环?
- 你是否掌握了.Net 官方的 MSIL 工具?
- .NET 中 ChatGPT 的 Stream 传输实现方法
- 未处理消息应全部传递给 DefWindowProc
- 共话 SAFe 团队层
- SpringBoot 里数据访问层的单元测试方法
- Spring AOP 里切点的定义方式有几种?
- 轻松搞懂零拷贝,就是如此简单
- WebRTC.Net 库:助力应用亲民友好,轻松实现视频通话接入
- 软件迭代管理的一般流程探讨
- 如何在 Github 实现免密登录