zoukankan      html  css  js  c++  java
  • mysql 开发基础系列22 SQL Model(带迁移事项)

    一.概述

      与其它数据库不同,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;

      

    --  下面可将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. 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中提供的数据库组合模式则会对数据迁移过程会有所帮助。对导出数据更容易导入目标。

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

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

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

  • 相关阅读:
    算法导论4线性时间与暴力寻找最大子数组
    算法导论4.1DivideAndConquer寻找最大子数组
    算法导论2.3算法设计分治法合并排序
    算法导论第二章算法入门2.1 插入排序
    eclipse 从已经存在代码建工程
    centos6.3 eclipse cdt
    Cant open file /data/svn/dev/db/txn-current-lock: Permission denied的解决方法
    git命令的安装与github简单使用
    CentOS-6.3安装配置SVN
    github使用_转
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9317979.html
Copyright © 2011-2022 走看看