技术文摘
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错误
- Python 正则表达式 findall 函数怎样匹配小括号
- Go泛型声明中接口类型interface{ *int } 的疑问及含义
- Go文件元素统计:单个Go文件中方法数量的正确统计方法
- Pandas获取DataFrame中比当前行值大的数据个数的方法
- Go中使用多类型任意参数指针修改原始对象的方法
- Go 语言中接口与实现的优雅命名方法
- 哪种方案更适合实时获取海量数据数量
- Python代码报ModuleNotFoundError 但pip list显示已安装matplotlib的原因
- pytest 命令怎样运行特定文件
- Python 在科学领域比 JavaScript 更受欢迎的原因
- 并发创建多个文件夹并写入文件的方法
- 怎样优化网络测速前端设计来提高准确性与效率
- 节点上用netstat命令看不到NodePort服务端口的原因
- Go语言采用晚绑定机制的原因
- Golang无缓冲Channel避免死锁的方法