当前位置: 代码网 > it编程>数据库>Mysql > Mysql严格模式小结

Mysql严格模式小结

2026年03月03日 Mysql 我要评论
mysql严格模式查看语法-- 两种写法均可,效果完全一致select @@sql_mode;-- 或更清晰的写法select @@session.sql_mode;上述结果说明未开启严格模式仅当前会

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.cnf
  • windows 系统:通常路径为 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 系统:
  1. 打开「服务」面板(右键此电脑 → 管理 → 服务和应用程序 → 服务)
  2. 找到 mysql 服务(如 mysql80),右键「重启」
  3. 登录 mysql 执行 select @@global.sql_mode; 验证

四、验证是否成功开启

无论哪种方式,配置后执行以下 sql,若结果中包含 only_full_group_by,说明 group by 严格模式已成功开启:

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

五、关键注意事项

  1. 启用 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 中且非聚合函数);
  2. 若需兼容旧版非规范查询,可临时移除 only_full_group_by(不推荐生产环境使用);
  3. 配置时需保留原有 sql_mode 中的其他标识(如 strict_trans_tables),避免丢失其他严格模式特性。

总结

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

到此这篇关于mysql严格模式小结的文章就介绍到这了,更多相关mysql严格模式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com