常见的SQL MODE及其解释

MySQL的SQL MODE用于控制MySQL对SQL语句的执行和处理的模式,‌主要作用包括:‌

  • 严格模式:‌例如STRICT_ALL_TABLES,‌在严格模式下,‌MySQL会更加严格地对待数据的插入、‌更新和删除操作,‌对于不合法的数据操作会返回错误信息,‌确保数据的完整性和一致性。‌
  • 数据校验:‌某些选项如NO_ZERO_DATENO_ZERO_IN_DATE可以阻止插入或更新日期和时间类型的字段为零值,‌避免出现无效的日期或时间数据。‌
  • 数据类型转换:‌选项如IGNORE_SPACEPIPES_AS_CONCAT可以改变MySQL对于字符串和数字之间的隐式转换规则,‌从而影响表达式的计算结果。‌
  • 语法兼容性:‌某些选项如ANSI_QUOTESONLY_FULL_GROUP_BY可以使MySQL的语法更加严格,‌以符合ANSI SQL标准,‌减少开发者在不同数据库系统之间切换时出现的语法差异问题。‌
  • 安全性:‌选项如NO_BACKSLASH_ESCAPESNO_UNSIGNED_SUBTRACTION可以提高MySQL的安全性,‌避免一些潜在的安全漏洞。‌

通过设置不同的SQL MODE选项,‌可以改变MySQL的执行和处理方式,‌从而提高数据的完整性、‌一致性和安全性。‌此外,‌SQL MODE的设置还可以帮助解决不同严格程度的数据校验问题,‌保证大多数SQL符合标准的SQL语法,‌以及在不同数据库之间进行数据迁移时使MySQL上的数据更方便地迁移到目标数据库中

SQL MODE

解释

STRICT_TRANS_TABLES

为事务存储引擎启用严格的sql模式,在插入不合法数据时,mysql将不再插入默认值,而是抛出错误,这样可以保证数据的完整性和一致性。

这种模式比较适合对数据完整性要求严格的场景。

ANSI

等同于

REAL_AS_FLOAT,

PIPES_AS_CONCAT,

ANSI_QUOTES,

IGNORE_SPACE和ONLY_FULL_GROUP_BY

TRADITIONAL

为事务存储引擎启用严格的sql模式,在插入不合法数据时,mysql将不再插入默认值,而是抛出错误.

这样可以确保数据的完整性和一致性,这种模式比较适合对数据完整性要求更严格的场景.

ONLY_FULL_GROUP_BY

可以理解为让mysql像传统的sql数据库一样运行,等同于

STRICT_TRANS_TABLES,

STRICT_ALL_TABLES,

NO_ZERO_IN_DATE,

NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

和NO_ENGINE_SUBTITUTION

NO_BACKSLASH_ESCAPES

如果某个列不在group by列表中,此时如果不对该列进行聚合处理,则该列不能出现在select列表,having条件中以及order by列表中

PIPES_AS_CONCAT

启用此模式将禁止使用反斜杠字符”\”作为字符串和标识符中的转义字符,反斜杠将像其他字符一样变成普通字符

NO_ENGINE_SUBTITUTION

将 ”||” 视为字符串连接操作符

NO_ZERO_DATE

启用此模式时,如果创建或者更改表时指定了不可用的存储引擎,则报错不执行;未启用此模式时,会替换成默认存储引擎

ERROR_FOR_DIVISION_BY_ZERO

启用此模式,’0000-00-00’则允许插入并成产生警告;

如果启用此模式和严格模式,则不允许’0000-00-00’插入,并会报错;

除非使用IGNORE.

对于insert ignore and update ignore,除以零插入NULL并产生警告

NO_ZERO_IN_DATE

如果启用此模式,则零部分的日期将被插入’0000-00-00’并产生警告;

如果启用此模式和严格模式,则不允许包含0的日期输入,会直接报错.

REAL_AS_FLOAT

把REAL类型(存储大小4个字节,可精确到小数点后7位)看成FLOAT类型(存储大小为8字节,可精确到小数点后第15位)

ANSI_QUOTES

双引号将被视为标识符的引号,而不是字符串的引号

IGNORE-SPACE

函数名称和(之间允许有空格,会导致内置的函数变成保留字)

Sql mode文档地址:

MySQL :: MySQL 8.0 Reference Manual :: 7.1.11 Server SQL Modes

相关推荐

  1. 常见SQL MODE及其解释

    2024-07-17 00:42:04       20 阅读
  2. 缓存常见问题及其解法

    2024-07-17 00:42:04       26 阅读
  3. 常见几种字符串及其区别

    2024-07-17 00:42:04       30 阅读
  4. 常见分类算法及其应用场景

    2024-07-17 00:42:04       25 阅读
  5. 解决C#连接MySQL数据库报错: SslMode=None;

    2024-07-17 00:42:04       39 阅读
  6. epoll使用示例及其解释

    2024-07-17 00:42:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 00:42:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 00:42:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 00:42:04       45 阅读
  4. Python语言-面向对象

    2024-07-17 00:42:04       55 阅读

热门阅读

  1. [C++]类作用域

    2024-07-17 00:42:04       18 阅读
  2. 入门C语言只需一个星期(星期一)

    2024-07-17 00:42:04       24 阅读
  3. 算法-双指针

    2024-07-17 00:42:04       19 阅读
  4. Mybatis 之批量处理

    2024-07-17 00:42:04       18 阅读
  5. Spring Boot 面试题及答案整理,最新面试题

    2024-07-17 00:42:04       18 阅读
  6. 【python基础】学习路线

    2024-07-17 00:42:04       18 阅读
  7. HTTP基本原理

    2024-07-17 00:42:04       22 阅读
  8. Git 的基本命令和使用方式

    2024-07-17 00:42:04       18 阅读
  9. 1.3Zygote

    2024-07-17 00:42:04       18 阅读