技术文摘
MySQL 5.7 报错 1055 的解决办法
MySQL 5.7 报错 1055 的解决办法
在使用 MySQL 5.7 数据库的过程中,报错 1055 是一个较为常见的问题,它会给数据库的正常运行和开发工作带来阻碍。深入了解并掌握有效的解决办法,对于数据库管理员和开发者来说至关重要。
MySQL 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”。简单来讲,就是在使用 GROUP BY 语句时,SELECT 列表中的列没有正确处理。按照 SQL 标准,如果使用了 GROUP BY,SELECT 后面的列要么包含在 GROUP BY 子句中,要么使用聚合函数(如 SUM、AVG、COUNT 等)进行处理。
解决这一问题,有几种实用的方法。可以调整查询语句,确保 SELECT 列表中的所有非聚合列都包含在 GROUP BY 子句中。例如,原查询语句为“SELECT column1, column2, AVG(column3) FROM table1 GROUP BY column1;”,若 column2 未参与聚合操作,就需要将其添加到 GROUP BY 子句中,改为“SELECT column1, column2, AVG(column3) FROM table1 GROUP BY column1, column2;”。
也可以使用聚合函数来处理 SELECT 列表中的非 GROUP BY 列。比如“SELECT column1, COUNT(column2), AVG(column3) FROM table1 GROUP BY column1;”,这里使用 COUNT 函数对 column2 进行处理,使其符合 SQL 标准。
另外,通过修改 MySQL 的配置参数 sql_mode 也能解决该问题。在 MySQL 配置文件(通常是 my.cnf 或 my.ini)中,找到 sql_mode 配置项,将 ONLY_FULL_GROUP_BY 模式移除。例如,原本的 sql_mode 配置为“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”。但这种方法需要谨慎使用,因为移除 ONLY_FULL_GROUP_BY 模式可能会导致查询结果不符合 SQL 标准。
在遇到 MySQL 5.7 报错 1055 时,根据实际情况选择合适的解决方法,能够快速恢复数据库的正常运行,确保开发和运维工作的顺利进行。
- 前端的容器化实践探索
- 微服务之服务发现模式
- Dubbo + Nacos 错误玩法会丧失高可用能力
- Codesandbox 使用者众多,其服务器能否承受?
- 程序员必知的五个国外高质量技术网站推荐
- 五分钟知晓 Flink 状态管理
- Python Tkinter 十分钟快速入门秘籍:轻松上手 Tkinter !
- React-Spring:赋予应用灵动活力
- K8S 从入门至实战:跨服务调用
- 调试经验:借正常程序行为识别 Bug
- ThreadLocal 原理一文通
- 怎样设计高并发系统
- ArrayPool 源码剖析:byte[] 能否池化?
- 为何别再用 Display:Contents
- 你一定不了解的 Spring 定义 Controller 接口的方式