MySQL 数据库 sql_mode

2024-11-25 21:03:00
丁国栋
原创 12
摘要:本文记录mysql sql_mode 的作用和设置等。

在 MySQL 中,sql_mode 是一个系统变量,用于控制 SQL 语法和数据库行为的特性。不同的 sql_mode 设置可以影响数据库查询的执行方式、数据验证、错误处理等。设置正确的 sql_mode 可以提高 SQL 查询的安全性和准确性,防止潜在的错误和不一致的数据状态。


默认的 sql_mode 在不同版本的 MySQL 中可能有所不同。比如在 5.7.43 中,默认是 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


1. ONLY_FULL_GROUP_BY
强制要求所有在 SELECT 语句中未被聚合函数(count,sum,avg,max,min,group_concat等函数用于对一组值进行计算并返回单个值)包围的列,必须在 GROUP BY 子句中列出。这有助于避免模糊查询,确保 SQL 查询的准确性。
  
2. STRICT_TRANS_TABLES
启用严格模式。在插入或更新数据时,如果数据不符合列的定义(例如,数据类型不匹配或超出范围),则会产生错误,事务将被回滚,而不是自动截断或转换数据类型。

3. NO_ZERO_IN_DATE
禁止插入日期包含零的值(如 '2021-00-01' 或 '2021-01-00')。如果尝试插入这样的日期,将会导致错误,而不是将其视为有效日期。

4. NO_ZERO_DATE
禁止插入零日期(如 '0000-00-00')。如果插入这样的值,将会导致错误。这个设置有助于确保日期数据的有效性。

5. ERROR_FOR_DIVISION_BY_ZERO
在执行除以零的操作时,MySQL 将返回错误,而不是返回 NULL。这有助于在处理数学运算时确保数据的准确性。

6. NO_AUTO_CREATE_USER
在使用 GRANT 语句时,如果指定的用户不存在,MySQL 不会自动创建该用户。这可以防止意外创建用户,增加安全性。

7. NO_ENGINE_SUBSTITUTION
如果请求的存储引擎不可用,MySQL 将抛出错误,而不是使用默认存储引擎。此设置确保使用者明确其选择的存储引擎。

--

发表评论
博客分类