一.概述

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

转载于:https://www.cnblogs.com/MrHSR/p/9317979.html

mysql 开发基础系列22 SQL Model(带迁移事项)相关推荐

  1. mysql 开发基础系列18 存储过程和函数(下)

    1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重 ...

  2. mysql 开发基础系列19 触发器

    触发器是与表有关的数据库对象,触发器只能是针对创建的永久表,而不能是临时表. 1.1 创建触发器 -- 语法: CREATE TRIGGER trigger_name trigger_time tri ...

  3. 掌握web开发基础系列--物理像素、逻辑像素、css像素

    思考一下 什么是物理像素?什么是css像素? 在 <掌握web开发基础系列--长度单位> 这篇文章中已经介绍过了css像素单位--px,这篇文章详细探讨一下设备物理像素和css像素之间的关 ...

  4. Cloudsim 3.0.3中VM调度策略系列类解析(带迁移的策略)

    Cloudsim 3.0.3中VM调度策略系列类解析(带迁移的策略) 注:本文为旧文的markdown重制版 Cloudsim中VM调度策略类在DataCenter(或PowerDataCenter) ...

  5. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-通过SQL实现特殊业务...

    前面的四篇文章演示ORM的一些常规操作与配置,通过前面的文章,应用开发人员要可以使用ORM开发出简单的应用,但是,ORM也不是万能钥匙,在业务应用中,还有很多是ORM解决不了的问题,对于这些问题,我们 ...

  6. 夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  7. asp.net控件开发基础系列

    本系列文章示例源码下载.各位如遇问题,请多查msdn,多利用网络.本人可能没时间一一回复,谢谢你们的支持,希望看到此文的人都能学好控件开发 http://www.cnblogs.com/Clingin ...

  8. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  9. MySQL/MariaDB基础及简单SQL语句

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 在Linux操作系统内核中提供了MySQL或MariaDB的rp ...

最新文章

  1. 降低噪声和电磁干扰的原则
  2. 520这天,我突然意识到,她根本配不上我这么聪明的男人
  3. 开始使用-编写你的第一个Flutter应用程序
  4. [jQuery] jquery.extend与jquery.fn.extend的区别?
  5. 安卓camera总体框架
  6. 树形动规_(战略游戏)
  7. MITx - 6.00.1x 笔记(4) Good Programming Practices
  8. java图形界面关键字_怎样用Java编写一个图形界面,要求可以利用关键词查询txt中的内容...
  9. oracle PROFILE的使用学习
  10. 关于人工智能数据标注学习
  11. 字符串的常用方法和常用类
  12. 计算机桌面图标变大,电脑桌面图标变大了怎么恢复?
  13. 目标检测-SSD算法详细总结
  14. 507 Lusir的游戏 二分 数论 [代码源][namomo spring camp]每日一题div2
  15. MDN Web Docs
  16. redux启示与实践
  17. springboot普通类调用bean
  18. 6-1 Point类的运算 (10 分)
  19. 在洋葱(Onion)架构中实现领域驱动设计
  20. 网络流二十四题之二十二 —— 火星探险问题

热门文章

  1. 分享:一款快速传输大文件、支持英文版的工具
  2. Python 抓取数据存储到Mysql中
  3. HDU 1727 Hastiness(模拟)
  4. Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)...
  5. Android Bug分析系列:第三方平台安装app启动后,home键回到桌面后点击app启动时会再次启动入口类bug的原因剖析...
  6. 如何不让FCKEditor自动添加P标签
  7. 理解ORACLE数据库字符集
  8. Linux网络编程小知识(字节序、IP格式、函数、子网掩码、DNS域名解析代码实现)
  9. 全国计算机等级考试题库二级C操作题100套(第17套)
  10. php webservice 上传,PHP实现WebService服务