MySQL禁用ONLY_FULL_GROUP_BY模式的三种方法

 更新时间:2025年11月26日 09:18:37   作者:wujiada001  
本文主要文章介绍了在MySQL启用了ONLY_FULL_GROUP_BY模式导致的问题及解决方法,提供了三种方法,下面就来详细的介绍一下实现步骤,感兴趣的可以了解一下

这是由于MySQL启用了ONLY_FULL_GROUP_BY模式导致的。以下是禁用该模式的三种方法,结合你的需求选择最合适的方案:

一、临时禁用(重启后失效)

1.当前会话禁用

直接在SQL客户端执行以下命令,仅对当前数据库连接有效:

SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));

2.全局禁用

修改全局设置,对所有新连接生效(但重启MySQL服务后失效):

SET GLOBAL sql_mode = (SELECT REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));

二、永久禁用(需修改配置文件)

步骤:

  1. 找到MySQL配置文件

    • Windowsmy.ini(通常位于MySQL安装目录或C:\ProgramData\MySQL\MySQL Server 8.0)。
    • Linux/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 修改配置: 在 [mysqld] 部分添加或修改 sql_mode,移除 ONLY_FULL_GROUP_BY。 示例配置:

    [mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
  3. 重启MySQL服务

    • Windows:通过服务管理器重启MySQL服务。
    • Linux:执行 sudo systemctl restart mysql
  4. 验证

    SELECT @@GLOBAL.sql_mode;

    确认输出中不再包含 ONLY_FULL_GROUP_BY

三、查询优化(推荐)

如果不想修改数据库配置,可以通过以下方式调整SQL语句,使其符合ONLY_FULL_GROUP_BY规则:

1.确保所有非聚合列在GROUP BY中

修改你的SQL,将SELECT列表中的非聚合列(如network_type)添加到GROUP BY子句:

GROUP BY t.id, cdn.cdn_device_network.network_type

2.使用聚合函数包裹非聚合列

对不需要分组的列使用ANY_VALUE()函数:

SELECT ANY_VALUE(network_type) AS network_type, ... FROM ... GROUP BY t.id

四、注意事项

  1. 数据一致性风险:禁用ONLY_FULL_GROUP_BY可能导致查询结果不确定,建议生产环境谨慎操作。
  2. 配置文件优先级:确保修改的配置文件是MySQL实际加载的(可能存在多个配置文件,优先级以最后加载的为准) 。
  3. MySQL版本差异:MySQL 8.0默认启用此模式,需通过配置文件永久修改 。

总结

  • 快速修复:临时禁用(方法一)适合紧急调试。
  • 长期方案:修改配置文件(方法二)确保重启后生效。
  • 最佳实践:优化SQL查询(方法三),避免依赖数据库模式

到此这篇关于MySQL禁用ONLY_FULL_GROUP_BY模式的三种方法的文章就介绍到这了,更多相关MySQL禁用ONLY_FULL_GROUP_BY内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 记录不存在时插入 记录存在则更新的实现方法

    mysql 记录不存在时插入 记录存在则更新的实现方法

    相信很多人都需要用到这个语句,请看下文:(在4.1以后的版本才有效)
    2008-08-08
  • 深入理解MySQL深分页慢问题及性能优化

    深入理解MySQL深分页慢问题及性能优化

    本文主要介绍了深入理解MySQL深分页慢问题及性能优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • navicat无法连接mysql的问题及解决方案

    navicat无法连接mysql的问题及解决方案

    文章讲述了如何解决本地IP没有访问远程数据库权限的问题,通过打开管理员窗口,登录MySQL服务器,更新用户权限,刷新权限并检查是否成功来实现
    2025-10-10
  • count(1)、count(*)与count(列名)的执行区别详解

    count(1)、count(*)与count(列名)的执行区别详解

    这篇文章主要介绍了count(1)、count(*)与count(列名)的执行区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySQL优化器的SQL重写规则介绍

    MySQL优化器的SQL重写规则介绍

    这篇文章主要介绍了MySQL优化器的SQL重写规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 解读SQL语句中要不要加单引号的问题

    解读SQL语句中要不要加单引号的问题

    这篇文章主要介绍了关于SQL语句中要不要加单引号的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 在MySQL中修改密码及访问限制的设置方法详解

    在MySQL中修改密码及访问限制的设置方法详解

    MySQL是一个真正的多用户、多线程SQL数据库服务器。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。
    2007-03-03
  • MySQL中Buffer Pool内存结构详情

    MySQL中Buffer Pool内存结构详情

    这篇文章主要介绍了MySQL中Buffer Pool内存结构详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Mysql解决USE DB堵塞详解

    Mysql解决USE DB堵塞详解

    这篇文章通过实例给大家分析了在MYSQL中出现USE DB堵塞的处理办法以及思考思路,有兴趣的朋友学习下吧。
    2017-12-12
  • MySQL备份和还原操作小结

    MySQL备份和还原操作小结

    备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件,这篇文章主要介绍了MySQL备份和还原操作小结,需要的朋友可以参考下
    2024-08-08

最新评论