MySQL 中 SQL Mode 相关知识

MySQL 可以运行不同的 SQL Mode(SQL 模式)下。SQL Mode定义了MySQL应支持的 SQL 语法、数据校验等,这样可以更容易的在不同的环境中使用MySQL

1、MySQL SQL Mode简介

在MySQL中,SQL Mode 常用来解决下面几类问题:

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

a、查看当前数据库的 SQL Mode : select @@sql_mode;

REAL_AS_FOLAT  PIPES_AS_CONCAT  ANSI_QUOTES  GNORE_SPACE  ANSI  -----允许插入超过字段长度的值,返回一个warning
STRICT_TRANS_TABLES(严格模式) ------实现数据的严格校验,使错误数据不能插入表中

b、设置SQL Mode 为 STRICT_TRANS_TABLES:set session sql_mode='STRICT_TRANS_TABLES'; (MySQL4.1开始有效)

语法: SET [SESSION|GLOBAL] sql_mode='modes'

SESSION 表示只在本次链接中生效;
GLOBAL 表示在本次连接中并不生效,而对于新的连接则生效

也可以通过使用“--sql-mode="modes"” 选项在MySQL启动时设置sql_mode

2、SQL Mode 的常见功能

a、校验日期数据合法性
b、在INSERT 或 UPDATE 过程中,如果SQL Mode 处于 TRADITION模式,运行MOD(x,0)会产生错误,因为TRADITIONAL也属严格模式
  在含有MOD的运算中根据实际情况设定好sql_mode
c、启用NO_BACKSLASH_ESCAPES模式,使反斜线成为普通字符。如果导入的数据存在反斜线,可以设置此模式,保证导入数据的正确性
d、启用 PIPES_AS_CONCAT模式,将“||”视为字符串的连接操作符。在Oracle等数据库中,“||”被视为字符串的连接操作符。
MySQL默认情况下支持 PIPES_AS_CONCAT模式

3、MySQL 常用的 SQL Mode

sql_mode 值 描述

ANSI : 等同于REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、ANSI组合模式,这种模式使
语法和行为更符合标准的SQL

STRICT_TRANS_TABLES : 适用于事务表和非事务表,它是严格模式,不允许非法日期,也不允许超过字段长度的值插入字段中,对于
插入不正确的值给出错误而不是警告

TRADITIONAL : 等同于 STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、
ERROR_FOR_DIVISION_BY_ZERO、TRADITIONAL、NO_AUTO_CREATE_USER组合模式,所以他也是严格模式,对于插入 不正确的 值给 出错误而不是警告。可以应用在事务表和非事务表,用在事务表时只要出现错误就会立即回滚

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

4、SQL Mode在迁移中如何使用

MySQL 提供了很多数据库的组合模式名称,例如“ORACLE”、“DB2”等,这些模式组合是由很多小的sql_mode组合而成,在异构数据库之间迁移
数据时可以尝试使用这些模式来导出适合于目标数据库格式的数据,这样就使得导出数据更容易导入目标数据库。

MySQL中常用的 sql_mode 组合:
组合后的模式名称 组合模式中的各个sql_mode

DB2 : PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTION、NO_FIELD_OPTIONS

MAXDB PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTION、NO_FIELD_OPTIONS、
NO_ATUO_CREATE_USER

MSSQL: PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTION、NO_FIELD_OPTIONS

ORACLE : PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTION、NO_FIELD_OPTIONS、
NO_ATUO_CREATE_USER

POSTGRESQL : PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTION、NO_FIELD_OPTIONS

例:在数据库迁移过程中,可以设置SQL Mode为NO_TABLE_OPTIONS 模式,这样将去掉show create table 中的 “engine”关键字,获得通用
的建表脚本
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值