Mysql之SQL Mode问题

1. Mysql SQL Mode简介

SQL Mode定义了Mysql应支持的SQL语句、数据校验等,这样可以容易在不同的环境中使用Mysql。

  1. 通过设置SQL Mode,可以完成不同严格程度的数据校验,有效地保障数据准确性。
  2. 通过设置SQL Mode为ANSI模式,来保证大多数SQL符合标准SQL语句,这样应用在不同数据库之间进行迁移时,则不需要对业务SQL进行较大的修改。
  3. 在不同数据库之间进行数据迁移之前,通过设置SQL Mode可以使Mysql上的数据更方便地迁移到目标数据库中。

2. 常用的SQL Mode

  1. ANSI模式:等同于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE和ANSI组合模式,这种模式使语法和行为更加符合标准的SQL。
  2. STRICT_TRANS_TABLES:适用于事务表和非事务表,它是严格模式,不允许非法日期,也不允许超过字段长度的值插入字段中,对于插入不正确的值给出错误而不是警告。
  3. TRADITIONAL:等同于STRICT_TRANS_TABLES、STRICT_TALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL和NO_AUTO_CREATE_USER组合模式,所以它也是严格模式,对于插入不正确的值是给出错误而不是警告,可以应用在事务表和非事务表,用在事务表,只要出现错误就会立即回滚。

可以发现,SQL Mode其实都是一些原子操作的组合,类似于角色和权限的关系。这样当实际应用时,只需要设置一个模式组合,就可以设置很多的原子模式,大大便利了用户工作。

3. SQL Mode在迁移中的应用

目标数据库组合模式中的各个sql mode
DB2PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS
MSSQLPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS
ORACLEPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER
POSTGRESQLPIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER

数据迁移过程中,可以设置SQL Mode为NO_TABLE_OPTIONS模式,这样将去掉show create table中的"engine"关键字,获得通用的建表脚本。
set session sql_mode=‘NO_TABLE_OPTIONS’;

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值