技术文摘
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错误
- 怎样实时获取 MySQL 新增数据并实现短信通知发送
- MySQL 存储过程参数报错:字符串类型的 DataName 为何执行失败
- 怎样实时获取 MySQL 数据库更新并通知用户
- MySQL 存储过程字符串参数报错:传入字符串参数为何报“Unknown column”错误
- MyBatis 批量插入时拦截器失效的解决办法
- MySQL 表中大型日期数据查询如何优化
- MySQL 里 IS TRUE 与 = TRUE 运算符结果不一致的原因
- MySQL 8.0 导入命令无效:mysqldump 导出的数据库文件为何无法通过命令行导入
- MySQL 存储多值类数据:逗号分隔值与关系表的抉择
- Mybatis 中怎样依据变量值动态执行不同 SQL 语句
- SQLAlchemy 中怎样指定查询字段名
- MySQL update join 语句中使用 order by 会致使程序崩溃吗
- PHP 8.0 中 @ 错误抑制符失效及致命错误无法隐藏的原因
- Docker-Compose 部署 MySQL 时出错该如何排查
- MySQL 8.0 中 mysqldump 命令导入数据失败的原因