常见的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值