技术文摘
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
- Kubernetes Lease 与分布式选主
- Spring Boot 3 与 Jasypt 集成的详细解析,您掌握了吗?
- Vue.js 3.4 版本发布:解析速度翻倍,新增双向绑定等功能
- Go 语言中 nil 的不相等问题,你掌握了吗?
- 20 个 Go 测试的实用建议,您采纳了吗?
- Koin:轻量级依赖注入框架在 Android 应用开发中的轻松集成
- Qs 与 Querystring:URL query 字符串的解析与格式化工具库
- 蜕变起点:UseEffect 的终极用法
- 共同探讨枚举规范化事宜
- Ant Design 家族迎新,全家族呈现!
- Kubernetes 中外部 HTTP 请求抵达 Pod 容器的完整流程
- RASP 五步轻松守护云端无服务器架构
- Fastapi 框架中的 OpenAPI 规范简述
- C# 开发 Windows 消息循环机制:原理与流程解析
- 面试官:解析 JVM 内存的整体结构及线程私有与共享情况