1. SQL Mode简介
通过SQL Mode 解决下面几个问题
- 可以完成不同严格程度的数据校验,有效地保障数据准确性
- 设置SQL Mode为ANSI模式,来保证大多数SQL符合标准的SQL语法,这样应用在不同数据库之间进行迁移时则不需要对业务SQL进行较大修改
- 在不同数据库之间进行数据库迁移之前,通过设置SQL Mode可以使MySQL上的数据更方便地迁移到目标数据库中
查看本机的sql_mode
select @@sql_mode
设置本的sql_mode
set [SESSION|GlOBAL] sql_mode='modes';
SESSION: 代表只在本次连接中生效
GlOBAL :代表本次不生效,而对于新连接生效
案例:
将mode改为严格模式后 记录无法插入
2. SQL Mode的常见功能
2.1 TRADITIONAL模式- 校验日期合法性
时间严格模式
在insert和update中,如果SQL Mode 处于此模式,那么运行mod(x,0) 求余就会产生错误,而在ansi中能插入但是插入是null,因为TRADITIONAL也属于严格模式,在非严格模式返回null
2.2 NO_BACKSLASH_ESCAPES
使反斜线为普通字符。
2.3 PIPES_AS_CONCAT
将‘||’视为字符串连接操作符
ansi 模式包含了此模式
3. 常用的SQL Mode
3.1 ANSI组合
3.2 STRICT_TRANS_TABLES
适用于事务表和非事务表,它是严格模式,不允许非法日期,也不允许超过字符长度的值插入字段中,对于插入不正确的值给出错误而不是警告
3.3 TRADITIONAL
严格模式,对于插入不正确的值给出错误而不是警告。可以应用在事务表和非事务表,用在事务表时,只要出现错误就会立即回滚
4. SQL Mode 在迁移中如何使用
- 如果MySQL与其他异构数据库之间有数据迁移的需求,那么MySQL中提供的数据库组合模式,比如’ORACLE’,’DB2’、’PostgreSQL’等等,这些模块由很多小的sql_mode组成,在异构数据库之间迁移数据时候,可以尝试适用这些的模式来导出适合于目标数据库的数据,这样更好的导出
- 可以使用sql_mode 为’NO_TABLE_OPTIONS’ 这样可以去掉engine关键字,这样可以获得通用的建表脚本