一.概述

  与其它数据库不同,mysql 可以运行不同的sql model 下, sql model
定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql。
  sql model 常用来解决下面几类问题

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

  1. 演示sql model 严格模式

  从mysql 5.7 开始,  默认是严格模式, mysql 开始严格遵从SQL
92规范。通过strict_trans_tables严格模式实现了数据的严格校验。
使错误数据不能插入表中, 从而保证了数据的准确性。

-- 查看sql model 模式 SELECT @@sql_mode;

  图片 1

-- 下面可将sql model设置为严格模式set session sql_mode='STRICT_TRANS_TABLES';

-- 新建表设置address为10个长度CREATE TABLE test_sqlmode( address VARCHAR(10) )-- 插入超过长度INSERT INTO test_sqlmode VALUES('123456789123');

  通过下图可以看出, 严格模式下超出数据 插入将报错。
如果不是严格模式,则会报warning 警告 并截取字符。

  图片 2

  2. sql mode 组合模式

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

ANSI模式

宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。

等同于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE 和ANSI

组合模式

traditional 模式

严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事务时,会进行事务的回滚。

TRADITIONAL 模式等同于STRICT_TRANS_TABLES、STRICT_ALL_TABLES、

NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL

和NO_AUTO_CREATE_USER 组合模式

STRICT_TRANS_TABLES模式

严格模式,进行数据的严格校验,错误数据不能插入,报error错误。

例如:不允许非法日期,也不允许超过字段长度的值插入字段中,对于插入不正确的值给出错误而不是警告

 

二. sql model 迁移如何使用

    如果mysql
与其它异构数据库之间有数据迁移的需求时,那么mysql中提供的数据库组合模式则会对数据迁移过程会有所帮助。对导出数据更容易导入目标。

图片 3

  在数据迁移过程中,可以设置SQL Mode 为NO_TABLE_OPTIONS
模式,这样将去掉show create table
中的“engine”关键字,获得通用的建表脚本。

-- 查看表有 engine 引擎SHOW CREATE TABLE test_sqlmode;

图片 4

-- 将所有表去掉engine 引擎。变为通用表-- 修改 当前会话下的sql modelSET SESSION sql_mode='NO_TABLE_OPTIONS'

图片 5

相关文章