技术文摘
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错误
- CSS 也能防止按钮重复点击,别再只用 JS 节流
- Spring 事件监听机制的本质竟是观察者模式
- ORM 链式操作的使用方法及软删除的优雅实现之道
- 频繁遗忘与重温?保姆级教程助你掌握三种高频设计模式!
- 如何有效防止接口重复提交
- 漫画:CRUD为何是所有程序员的最终归宿?
- 基于 ASM 的 Java 类与接口动态代理实现硬核剖析
- 前端常见的数据可视化工具库
- PyTorch 常用的五个抽样函数
- Go 会违背初心吗?新提案:手动管理内存
- GitHub Actions 助力自动化部署的实现
- React 导航栏搜索功能的实现方法
- ORM 链式操作的字段过滤及 GoFrame 不支持 migrate 功能的原因
- 两万字梳理常见的用滥设计模式
- 40 余种图片优化工具整理,图片压缩就靠它!