技术文摘
MySQL 中 ONLY_FULL_GROUP_BY 如何禁用
MySQL 中 ONLY_FULL_GROUP_BY 如何禁用
在 MySQL 数据库的使用过程中,ONLY_FULL_GROUP_BY 这个模式常常会给开发者带来一些困扰。ONLY_FULL_GROUP_BY 模式要求在使用 GROUP BY 语句时,SELECT 子句中的所有非聚合列必须包含在 GROUP BY 子句中,否则就会抛出错误。这在某些复杂查询场景下,限制了我们的灵活性,所以很多时候需要将其禁用。那么,如何在 MySQL 中禁用 ONLY_FULL_GROUP_BY 呢?
我们可以通过修改 MySQL 的配置文件来实现。对于不同的操作系统,配置文件的位置可能有所不同。在 Linux 系统下,通常配置文件路径为 /etc/mysql/mysql.conf.d/mysqld.cnf。找到配置文件后,打开它并在 [mysqld] 部分添加或修改以下内容:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这里移除了 ONLY_FULL_GROUP_BY 模式。修改完成后,保存文件,然后重启 MySQL 服务,使配置生效。
除了修改配置文件,我们还可以在 MySQL 会话级别禁用 ONLY_FULL_GROUP_BY。在进入 MySQL 客户端后,使用以下命令:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
这条命令会临时移除当前会话中的 ONLY_FULL_GROUP_BY 模式。不过需要注意的是,这种方式只对当前会话有效,一旦会话结束,模式会恢复到原来的设置。
如果希望在全局级别禁用 ONLY_FULL_GROUP_BY,可以使用以下命令:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
执行该命令后,所有新创建的会话都会受到影响。但要注意,这需要有足够的权限,并且修改全局配置可能会对整个系统产生影响,需谨慎操作。
在实际开发中,禁用 ONLY_FULL_GROUP_BY 虽然能带来一定便利,但也可能导致查询结果不符合预期,所以要根据具体业务需求和数据情况来决定是否禁用,以及如何禁用。掌握这些禁用方法,能帮助我们在 MySQL 开发中更加得心应手。
TAGS: MySQL 数据库配置 禁用方法 ONLY_FULL_GROUP_BY
- Spring Cloud 快速掌握之 Nacos 篇
- 这些粘贴板工具,让效率猛增十倍
- 前端开发中的居中问题小结
- TypeScript 5.0 beta 发布:包含新版 ES 装饰器、泛型参数常量修饰与枚举增强等
- 面试常见:HTTPS 执行流程解析
- Preact 竟采用 Vue3 的响应式设计,信仰是否崩塌
- Java 已走向衰落?
- Go1.20 新特性:PGO、编译速度与错误处理,你了解多少?
- Go 设计模式:优化项目高依赖耦合度的适配器方案
- 未高中毕业,借 Java 达成财务自由!
- Zookeeper 恢复但线上微服务全部掉线的原因何在?
- CSS 怎样使 auto height 完美适配过渡动画
- 服务接口高可用设计浅析
- Java 实战:Hutool 中 FileUtil 文件操作笔记
- 严选交易数据源的独立切换实践