MySQL sql_mode简介

分享于:2020-09-29 10:51:09

1、sql_mode
是一组mysql支持的基本语法及校验规则
查询当前系统sql_mode的设置
select @@sql_mode

mysql> select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION													  |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)


全局和会话的概念
全局就是影响整个数据库
会话就是影响当前连接的会话,如果会话终止,设置的参数失效


静态参数和动态参数
静态参数:只有数据库进行重启才会生效(数据库安装时就要确定好)
动态参数:在数据库运行过程中可以随时修改


2、sql_mode值举例
STRICT_TRANS_TABLES:
mysql存储引擎的概念
innodb存储引擎(oltp系统)
myisam存储引擎(非实时交易)
对于innodb存储引擎来说当设置sql_mode有该值是,当发现插入数据无法正常插入,会报错,并且回滚所有参数(假如一个插入操作往数据表中插入10行数据,但是在第五行数据不能插入,此时会终止插入操作并且会回滚插入成功的数据)
对于myisam存储引擎:当插入数据是第一行无法插入时,报错并且回滚插入数据。当插入的数据不是第一行无法插入时,此时mysql数据库会将无法插入的值转换为近似值或者发生隐式类型转换,并且不会报错
STRICT_ALL_TABLES:
对于innodb存储引擎作用一致
对于myisam存储引擎:当插入不是第一行报错时,会将报错之前的数据保留,终止之后的插入操作
NO_ENGINE_SUBSTITUTION
当存储引擎被禁止或者未解析时,当使用时会报错
only_for_group_by:
当select字句中出现的单独列没有出现在group by字句中,此时就会报错
NO_AUTO_CREATE_USER:
禁止创建密码为空的用户
NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零
NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL
PIPES_AS_CONCAT:
将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符


来源:https://blog.csdn.net/ssz1219175635/article/details/88429479