技术文摘
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错误
- Java 三元表达式:条件判断的高效简洁之选
- 图形编辑器开发:是否应效仿 Figma 采用 Wasm
- Golang 中 Strings 包之 Strings.Replacer 详解
- 值得收藏的六个在线工具网站:画图、PhotoShop、观影、PDF 转换、ChatGPT 等工具集合
- Java 反射:探寻代码背后的神秘力量
- Python 闰年辨别之道
- 适配器模式:化解不兼容接口的秘诀
- 常用的五种负载均衡算法
- 网络安全的入口设计模式
- Java 达成系统限流实现
- 混合现实的架构:现实与虚拟世界的融合
- 2023 年程序员升职加薪必用的 12 款效率神器
- AI 驱动的 VR:机器学习对虚拟现实体验的强化作用
- 数据驱动决策:以分析指标指引开发
- JavaScript 变量:一篇文章全知晓