iojsioi 发表于 2018-10-22 12:24:41

mysql之SQL模型

  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>SELECT@@global.sql_moed;
  STRICT_ALL_TABLES
  mysql>quit;
  #mysql -uroot -p
  mysql>SELECT @@session.sql_mode;
  STRICT_ALL_TABLES

页: [1]
查看完整版本: mysql之SQL模型