Mysql严格模式小结

 更新时间:2026年03月03日 09:27:06   作者:雷神乐乐  
本文主要介绍了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.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严格模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL死锁成因及解决过程

    MySQL死锁成因及解决过程

    本文详细介绍了死锁的概念、发生条件、典型场景及原因,重点解释了MySQL中的间隙锁、插入意向锁和隐式锁的工作原理,并提供了避免死锁的方法,包括SQL设计、事务管理和锁机制优化,此外,还介绍了死锁的监控与调试方法,通过合理设计和优化,可以有效降低死锁发生的风险
    2026-05-05
  • mysql 导入导出数据库以及函数、存储过程的介绍

    mysql 导入导出数据库以及函数、存储过程的介绍

    本篇文章是对mysql中的导入导出数据库命令以及函数、存储过程进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 解决Idea链接mysql数据库失败Schemas中为空的问题

    解决Idea链接mysql数据库失败Schemas中为空的问题

    文章讲述了在使用Sechemas拦截MySQL数据库时遇到没有数据的情况,并分析了可能是由于数据库版本问题导致的,作者建议根据自己的数据库版本进行选择,如果不确定版本,可以尝试所有版本,以解决问题
    2026-01-01
  • MySQL实战文章(非常全的基础入门类教程)

    MySQL实战文章(非常全的基础入门类教程)

    半个月时间把MySQL重新巩固了一遍,梳理了一篇几万字超硬核文章,想学习mysql的朋友可以看看
    2023-05-05
  • mysql中逻辑函数的具体使用

    mysql中逻辑函数的具体使用

    MySQL中逻辑函数包括IF、CASE、COALESCE、NULLIF和IFNULL,用于根据条件对数据进行判断和选择,适用于复杂的数据处理需求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • MySQL数据库备份问题及处理

    MySQL数据库备份问题及处理

    本文主要介绍了MySQL的日志分类、备份重要性、备份类型、备份方法及备份命令等内容,日志包括错误日志、二进制日志、中继日志、慢查询日志等,备份方法包括冷备份、二进制日志增量备份、第三方工具备份等,备份类型有完全备份、差异备份、增量备份等
    2026-05-05
  • SQL中笛卡尔积的实际应用

    SQL中笛卡尔积的实际应用

    笛卡尔积算法,又称为笛卡尔积枚举法,是一种枚举算法,用于在两个或多个集合之间枚举所有可能的组合,这篇文章主要给大家介绍了关于SQL中笛卡尔积的相关资料,需要的朋友可以参考下
    2023-03-03
  • 详解数据库连接的URL的写法及总结

    详解数据库连接的URL的写法及总结

    这篇文章主要介绍了详解数据库连接的URL的写法及总结的相关资料这里提供了四种方法1、oracle.2、MySQL.3、SQL Server.4、DB2,需要的朋友可以参考下
    2017-07-07
  • 关于msyql事务隔离你要知道

    关于msyql事务隔离你要知道

    这篇文章主要介绍了关于msyql事务隔离的相关资料,文中讲解非常细致,帮助大家更好的理解和学习mysql,感兴趣的朋友可以了解下
    2020-07-07
  • 重新restore了mysql到另一台机器上后mysql 编码问题报错

    重新restore了mysql到另一台机器上后mysql 编码问题报错

    重新restore了mysql到另一台机器上,今天新写了一个app,发现在admin界面下一添加汉字就会报错
    2011-12-12

最新评论