技术文摘
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 时,根据实际情况选择合适的解决方法,能够快速恢复数据库的正常运行,确保开发和运维工作的顺利进行。
- 掌握状态管理,洞察前端开发核心
- SpringBoot 善用全局处理器 优雅实现参数校验
- Eureka 向 Nacos 的迁移:双注册双订阅模式
- Chef 与 Puppet:DevOps 工具之比较
- Webpack 对 Commonjs 和 Esmodule 模块打包产物的比较
- 一行 CSS 达成十种现代布局的方法
- 项目整合 Sentinel 实现服务限流与容错
- 战略设计中的上下文映射与系统分层架构
- Python 竟也能运用动态链接库,厉害了
- Vue.js 中 KeepAlive 的原理及实现(18)
- TypeScript 类型挑战:Pick 的实现
- Nodejs 深度剖析:Event Loop 本质与异步代码中的 Zalgo 难题
- 你是否明白 Netty 究竟是什么?
- Python 中的四个高效技巧
- 深入解析 React Hooks 的闭包陷阱成因