技术文摘
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 时,根据实际情况选择合适的解决方法,能够快速恢复数据库的正常运行,确保开发和运维工作的顺利进行。
- Vision Transformer 算法的快速学习
- C#中Attribute的魅力:从基础走向高级AOP实践
- Go 高级构建指引
- C# 中占位符替换的五种方法
- Vue3 里怎样实时获取用户电脑电量并予以展示
- DDD 学习及感悟:摆脱 CRUD 思维局限
- Rust 打造的文件搜索工具 fd 替代 find ,速度超快!
- 这个库让命令行告别黑不溜秋
- System.Text.Json 处理性能的提升策略
- 创建索引必然锁表吗?
- Python 替代 xftp 实现从 Linux 服务器下载文件
- 运用「设计模式」巧妙化解 BUG 的历程,真棒!
- C++模板优化,推动模板编程新高度
- 哪种编程语言最节能?编程质量会影响耗电吗?
- Vue 3 组合式 API:你是否真的需要?