SQL模型(SQL mode):
通过定义某些规定,限制用户行为,并定义对应的处理机制。
常见的模型:
ANSI
宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL
严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES
严格模式,进行数据的严格校验,不允许向一个支持事物的表中插入非法数据,报error错误。
STRICT_ALL_TABLES
未设置的情况下,所有的非法数值都允许,返回警告信息。设置以后只要违反数据规则,都不允许填入,并返回错误。
ANSI QUOTES
双引号和反引号作用相同,只能用来引用字段名称/表名等,单引号只能引用在字符串。mysql中默认3者可以随意引用。
IGNORE_SPACE
在内建函数中忽略多余空格
查看默认的模型:
mysql>SHOW GLOBAL VARIABLES LIKE ‘sql_mode‘;
修改模型:
mysql>SET SESSION sql_mode=MODE1,...; 修改当前会话级别
或者
#vim /etc/my.cnf 配置文件中修改全局级别
sql_mode=MODE1,...
实例:
1.查看全局和会话的sql_mode的值
mysql>SHOW GLOBAL VARIABLES LIKE ‘sql_mode‘;
mysql>SHOW VARIABLES LIKE ‘sql_mode‘;
或
mysql>SELECT @@global.sql_mode;
mysql>SELECT @@session.sql_mode;
2.修改sql_mode的值为strict_all_tables,并验证动态调整生效情况。
mysql>SET GLOBAL sql_mode=‘strict_all_tables‘;
mysql>SELECT @@session.sql_mode;
mysql>SELECT @@global.sql_mode;
STRICT_ALL_TABLES
mysql>quit;
#mysql -uroot -p
mysql>SELECT @@session.sql_mode;
STRICT_ALL_TABLES
mysql>SET SESSION sql_mode=‘strict_trans_tables‘;
mysql>SELECT @@session.sql_mode;
STRICT_TRANS_TABLES
mysql>[email protected]@global.sql_moed;
STRICT_ALL_TABLES
mysql>quit;
#mysql -uroot -p
mysql>SELECT @@session.sql_mode;
STRICT_ALL_TABLES