16.SQL Mode及相关问题
SQL Mode定义了Mysql支持的SQL语法和数据校验级别,Mysql支持多种SQL Mode。
用途:
设置不同的SQL Mode可以对数据进行不同严格程度的校验,即在不同应用环境提供不同的数据质量;
设置不同的SQL Mode可以方便数据迁移至目标数据库;
ANSI模式可以保证大多数SQL符合SQL标准语法,方便应用在不同数据库上迁移。
16.1 Mysql SQL Mode简介
1.查看当前SQL Mode
select @@sql_mode;
2.修改SQL Mode
语法:
set [session|global] sql_mode='sql模式名';
说明:
session 只对当前会话有效,其余会话无效;
global 对所有新会话有效,mysql重启后失效;
在my.cnf文件中设置sql_mode='sql模式名' 持久有效。

16.2 SQL Mode的常见功能
sql模式分为模式组和原子模式,模式组由固定的原子模式组成,多个原子模式与多个原子模式或多个模式组可以自由组合。
原子模式包括:
REAL_AS_FLOAT : REAL 为 FLOAT 的同义词(默认情况, REAL 为 DOUBLE 的同义词).
PIPES_AS_CONCAT :管道符(||) 作为连接符.(默认使用函数 CONCAT 连接字符)
ANSI_QUOTES : 标准引号, 双引号不作为字符串引号,作为关键字标识符引号
IGNORE_SPACE :对于内置函数与其他字符间的空格,忽略空格
ONLY_FULL_GROUP_BY(MySQL 5.7.5) select 非group by列报错。聚合语句安装标准写法,如 oracle sqlserver 一样。
NO_ZERO_IN_DATE :警告,日期格式(月日)是'00'
NO_ZERO_DATE :警告,日期格式是 '0000-00-00'
ERROR_FOR_DIVISION_BY_ZERO :警告,除数为0
NO_AUTO_CREATE_USER 禁止使用 GRANT 创建密码为空的用户。
NO_ENGINE_SUBSTITUTION :默认情况创建或修改表的存储引擎不支持时,自动转为默认的INNODB;使用该模式后,存储引擎不支持时则报错。
ALLOW_INVALID_DATES :警告,检查日期格式合法性(DATE 或 DATETIME, 非 TIMESTAMP )
NO_AUTO_VALUE_ON_ZERO :运行序列中插入 "0",如果 id 不约束唯一, 可插入多个。插入 NULL 值默认都会自增。
HIGH_NOT_PRECEDENCE :未使用模式 HIGH_NOT_PRECEDENCE, "not id between 2 and 4" 相当于 "not (id between 2 and 4)";使用模式 HIGH_NOT_PRECEDENCE, "not id between 2 and 4" 相当于 "(not id) between 2 and 4".
NO_BACKSLASH_ESCAPES :反斜杠"\"为普通字符而不是转义字符。
NO_UNSIGNED_SUBTRACTION : UNSIGNED 类型如果得到一个负值,则报错。(尽量不要 UNSIGNED)
PAD_CHAR_TO_FULL_LENGTH :对于 char、nchar 类型,默认以空字符填充,查询时自动去掉空字符。启用该模式后,查询时空字符保留。
NO_DIR_IN_CREATE :创建表分区时,忽略命令 INDEX DIRECTORY 和 DATA DIRECTORY。用于副本示例中的选项。

16.3 常用的SQL Mode
固定模式组分为:
ANSI 非严格模式:数据长超、非法日期不会报错
REAL_AS_FLOAT : REAL 为 FLOAT 的同义词(默认情况, REAL 为 DOUBLE 的同义词).
PIPES_AS_CONCAT :管道符(||) 作为连接符.(默认使用函数 CONCAT 连接字符)
ANSI_QUOTES : 标准引号, 双引号不作为字符串引号,作为关键字标识符引号
IGNORE_SPACE :对于内置函数与其他字符间的空格,忽略空格
ONLY_FULL_GROUP_BY(MySQL 5.7.5)
STRICT_TRANS_TABLES :对事务型表操作,插入表时如果第一行数据不符合约束则终止执行并回滚。
NO_ZERO_IN_DATE
NO_ZERO_DATE
ERROR_FOR_DIVISION_BY_ZERO
TRADITIONAL 严格模式:非法日期、除数为0、数据超长 报错
STRICT_TRANS_TABLES :对事务型表操作,插入表时如果第一行数据不符合约束则终止执行并回滚。
STRICT_ALL_TABLES
NO_ZERO_IN_DATE:
NO_ZERO_DATE:
ERROR_FOR_DIVISION_BY_ZERO:除数为0报错
NO_AUTO_CREATE_USER:
NO_ENGINE_SUBSTITUTION

16.4 SQL Mode在迁移中如何使用
POSTGRESQL\DB2\MSSQL
PIPES_AS_CONCAT
ANSI_QUOTES
IGNORE_SPACE
NO_KEY_OPTIONS
NO_TABLE_OPTIONS :建表语句不包括engine
NO_FIELD_OPTIONS
ORACLE\MAXDB
PIPES_AS_CONCAT
ANSI_QUOTES
IGNORE_SPACE
NO_KEY_OPTIONS
NO_TABLE_OPTIONS
NO_FIELD_OPTIONS
NO_AUTO_CREATE_USER 禁止使用 GRANT 创建密码为空的用户。
NO_BACKSLASH_ESCAPES : 将\视为普通字符

16.5 小结
mysql5.7 默认模式:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION,
5.7.4 废弃:ERROR_FOR_DIVISION_BY_ZERO
5.7.5 默认:ONLY_FULL_GROUP_BY , STRICT_TRANS_TABLES
5.7.7 默认:NO_AUTO_CREATE_USER
5.7.8 默认:ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, NO_ZERO_IN_DATE

NO_AUTO_CREATE_USER 禁止使用 GRANT 创建密码为空的用户。
标准写法:
create user user01@'localhost' identified by 'user01';
grant all on test.* to user01@'localhost';
flush privileges;

16.Mysql SQL Mode的更多相关文章

  1. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  2. 转:ibatis常用16条SQL语句

    1.输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" par ...

  3. mysql sql语句大全(转载)

      1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ...

  4. 基于Inception搭建MySQL SQL审核平台Yearing

    基于Inception搭建MySQL SQL审核平台Yearing Inception 1. Inceptionj简介 2. Inception安装 2.1 下载和编译 2.2 启动配置 Yearni ...

  5. mysql/sql server和java之间的数据类型对应关系

    Mysql************************************当前列 ClassName ColumnType DisplaySize TypeName0: java.lang.I ...

  6. ibatis常用16条SQL语句

    (1) 输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" p ...

  7. MySQL SQL查询优化技巧详解

    MySQL SQL查询优化技巧详解 本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大数据里的MYSQL使用. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  8. MySQL客户端工具的使用与MySQL SQL语句

    MySQL客户端工具的使用 1.MySQL程序的组成 客户端 mysql:CLI交互式客户端程序 mycli:CLI交互式客户端程序;使用sql语句时会有提示信息 mysql_secure_insta ...

  9. jbpm3.2中jbpm.jpdl.mysql.sql文件运行报错的问题

    这是一个很久之前遇到的问题,就是用从官网下下载的jbpm组件,它的jbpm.jpdl.mysql.sql不能正常运行.其原因是该sql文件中有一句语句有错误.现在附上正确的jbpm.jpdl.mysq ...

随机推荐

  1. python __dict__

    dict 以key-value 的形式存储着本对类/模块的: 模块的__dict__ 属性: 存储了模块的 name (这个也是模块的一个单独的键,即:在Bx.py 中引入Ax.py 那么,在Bx中, ...

  2. C++ 自定义控件的移植(将在其它程序中设计的自定义控件,移植到现在的系统中)

    方法很简单就是将需要的代码 复制到 新系统中就可以了,方法就是 把相关文件添加到现有的系统中,并特别注意以下问题 \如果原设计中用到了菜单或是其它资源,相应的资源要在新的菜单中,手动添加. 目前没有发 ...

  3. 常见三种字符编码的区别:ASCII、Unicode、UTF-8

    什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...

  4. Java 中 synchronized的用法详解(四种用法)

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码.本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧 ...

  5. msf客户端渗透(一):payload利用简单示范

    针对Windows 开启侦听 查看payload选项 将1.exe传到网页上 win7访问网页并下载1.exe 下载好之后双击运行,在服务器端就获得了一个shell   针对linux 先获取到一个软 ...

  6. MAT eclipse内存分析工具

      启动的时候提示: Failed to load the JNIshared library 解决办法: 查看配置文件:MemoryAnalyzer.ini --launcher.librarypl ...

  7. J_link重刷固件

    第一步:上电短接ERS 第二步:上电短接TST      (擦除原来的固件) 完成上面两步后,再连接电脑,电脑将出现正常的串口连接 第三步:(烧固件) 在SAM-BA xxx固件烧写选好芯片类型,连接 ...

  8. 【C++】Mandelbrot集绘制(生成ppm文件)

    曼德勃罗特集是人类有史以来做出的最奇异,最瑰丽的几何图形.曾被称为"上帝的指纹". 这个点集均出自公式:Zn+1=(Zn)^2+C.(此处Z.C均为复数)所有使得该公式无限迭代后的 ...

  9. javaService

    JavaService.exe -install TestService "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.pat ...

  10. 【pyspider】启动爬虫后在results页面没有看到结果

    今天根据书上的介绍写了一个简单爬虫,爬取豌豆荚里面APP的基本信息,但是在调试结果正常后,发现跳转到result页面后没有看到结果. 后来上网查了一下,发现要在def detail_page(self ...