Mysql严格模式小结

来源:这里教程网 时间:2026-03-03 10:14:23 作者:
永久开启(全局生效,重启 MySQL 仍有效)1. 找到 MySQL 配置文件2. 编辑配置文件,添加 / 修改sql_mode重启 MySQL 服务使配置生效四、验证是否成功开启五、关键注意事项总结

MySQL严格模式查看语法

-- 两种写法均可,效果完全一致 SELECT @@sql_mode; -- 或更清晰的写法 SELECT @@session.sql_mode;

上述结果说明未开启严格模式

仅当前会话开启严格模式:

-- 会话级生效(仅当前连接有效) SET @@session.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; -- 简写形式(效果同上) SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

永久开启(全局生效,重启 MySQL 仍有效)

适用于生产环境,需要修改 MySQL 配置文件,步骤如下:

1. 找到 MySQL 配置文件

Linux 系统:通常路径为 /etc/my.cnf 或 /etc/mysql/my.cnfWindows 系统:通常路径为 MySQL安装目录/my.ini(如 C:\Program Files\MySQL\MySQL Server 8.0\my.ini)

2. 编辑配置文件,添加 / 修改sql_mode

在配置文件的 [mysqld] 节点下,添加(或修改已有的)sql_mode 配置,拼接 ONLY_FULL_GROUP_BY:

[mysqld] # 开启GROUP BY严格模式(包含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_ENGINE_SUBSTITUTION

重启 MySQL 服务使配置生效

Linux 系统(CentOS/RHEL):

# 重启MySQL服务 systemctl restart mysqld # 验证是否生效 mysql -u root -p -e "SELECT @@global.sql_mode;" Windows 系统:

    打开「服务」面板(右键此电脑 → 管理 → 服务和应用程序 → 服务)找到 MySQL 服务(如 MySQL80),右键「重启」登录 MySQL 执行 SELECT @@global.sql_mode; 验证

四、验证是否成功开启

无论哪种方式,配置后执行以下 SQL,若结果中包含 ONLY_FULL_GROUP_BY,说明 GROUP BY 严格模式已成功开启:

-- 验证会话级 SELECT @@sql_mode; -- 验证全局级 SELECT @@global.sql_mode;

五、关键注意事项

    启用 ONLY_FULL_GROUP_BY 后,原有不符合规范的 GROUP BY 查询会报错(例如:SELECT name, age FROM user GROUP BY name; 是合法的,但 SELECT name, age, address FROM user GROUP BY name; 会报错,因为 address 未在 GROUP BY 中且非聚合函数);若需兼容旧版非规范查询,可临时移除 ONLY_FULL_GROUP_BY(不推荐生产环境使用);配置时需保留原有 sql_mode 中的其他标识(如 STRICT_TRANS_TABLES),避免丢失其他严格模式特性。

总结

    开启 GROUP BY 严格模式的核心:添加 ONLY_FULL_GROUP_BY 到 sql_mode;临时生效:SET sql_mode = 'ONLY_FULL_GROUP_BY,原有其他配置';(当前会话);永久生效:修改 my.cnf/my.ini 的 [mysqld] 节点,添加包含 ONLY_FULL_GROUP_BY 的 sql_mode,重启 MySQL;验证标准:@@sql_mode 或 @@global.sql_mode 结果中包含 ONLY_FULL_GROUP_BY。

到此这篇关于Mysql严格模式小结的文章就介绍到这了,

相关推荐

热文推荐