最近在学习《MySQL技术内幕:SQL编程》并做了笔记,本博客是一篇笔记类型博客,分享出来,方便自己以后复习,也可以帮助其他人

SQL_MODE:MySQL特有的一个属性,用途很广,可以通过设置属性来实现某些功能支持

 # 全局的SQL_MODE
SELECT @@global.sql_mode;
# 当前会话的SQL_MODE
SELECT @@session.sql_mode;

SQL_Mode默认值是为空的,对于SQL_mode的设置可以在mysql配置文件(my.ini或者my.cnf),或者直接通过命令设置

严格模式:是指将sql_mode设置为STRICT_TRANS_TABLES或者STRICT_ALL_TABLES,设置为严格模式是不允许非法的操作的,比如将Null值写到非空要求的字段里,或者写入不合法的日期数据,比如'2019-09-40'

SET GLOBAL sql_mode ='STRICT_TRANS_TABLES';
SET GLOBAL sql_mode ='STRICT_ALL_TABLES';

数据原本有数据的情况,就不要直接set,用concat连接起来:

set @@session.sql_mode=concat(@@sql_mode,',IGNORE_SPACE');
  • STRICT_TRANS_TABLES:启用了严格模式,只影响事务表,不影响非事务表,如果一个值不能写到事务表(例如存储引擎为InnoDB),就中断当前操作不影响非事务表(例如存储引擎为MYISAM)
  • STRICT_ALL_TABLES:启用STRICT_ALL_TABLES后,对所有引擎的表都启用严格模式
  • ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为开启这个模式后,双引号被解释为识别符
  • ALLOW_INVALID_DATES:这个模式启用后,将开启对日期的不完全检验,比如只检验月份是否在112,日期是否在131,这种检验对于date、datetime类型的是可以的,但是对于timestamp是没效果的
  • ERROR_FOR_DIVISION_BY_ZERO:在insert或者update过程中,如果数据除以0(或者MOD(

    x,0))会产生错误,如果没开启改模式,则数据除以0时,MySQL返回NULL值
  • HIGH_NOT_PRECEDENCE NOT:开启旧版本的表达式优先级,例如 Not a between b and c被解释为not (a between b and c),不过在MySQL的一些旧版本里是解释为(not a) between b and c的,如果要使用旧版本的这种,就要开启 HIGH_NOT_PRECEDENCE NOT
  • IGNORE_SPACE:忽略函数名和括号之间的空格,这个属性默认是不开启的,一般是不建议开启的,比如某些特殊情况才可以开启,比如 select count (1) from t; count之间有空格会报错,开启后就不会报错,不过一般是不会在函数和括号直接加空格的,除非有表名或者列名也命名为count,这种情况就要加空格,表名,这个count不是表名,而是函数名
  • NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户
  • NO_AUTO_VALUE_ON_ZERO:这个属性是设置对于自动增长的列不允许写0值,也写入了0或者null,不会写0,假如写入了0,数据表里本来没数据,就会写1,以此类推
  • NO_BACKSLASH_ESCAPES:反斜杆“\”作为普通字符而非转义符
  • NO_DIR_IN_CREATE:在创建表时忽略所有INDEX DIRECTORY和DATE DIRECTORY的选项
  • NO_ENGINE_SUBTRACTION:用到的存储引擎被禁用或者未编译,就用默认的存储引擎,并且抛出异常,
  • NO_UNSIGNED_SUBTRACTION:启用这个属性后,两个unsigned类型相减返回signed类型
  • NO_ZERO_DATE:不允许写入为0格式的日期,比如“0000-00-00 00:00:00”,启用这个属性后,写入这种类型数据就会抛异常
  • NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零的情况
  • ONLY_FULL_GROUP_BY:如果select出现的列没有在group by中就会报错
  • PAD_CHAR_TO_FULL_LENGTH:对于char类型字段,查询时候不要截取空洞数据,所谓空洞数据就是自动填充0x20的数据
CREATE TABLE t (a CHAR(10));
INSERT INTO t SELECT 'a';



在默认情况下查询是这样的,如果设置PAD_CHAR_TO_FULL_LENGTH,查询出来的是:

  • REAL_AS_FLOAT:将REAL作为FLOAT的同义词,而不是double的同义词
  • PIPES_AS_CONCAT:将“||”视为字符串的连接操作符,而非或运算符,这个就和oracle是一样的

下面给出几种选项的组合:

  • ANSI:等同于RELA_AS_FLOAT、PIPES_AS_CONCAT和ANSI_QUOTES、IGNORE_SPACE的组合
  • ORACLE:等同于PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS和NO_AUTO_CREATE_USER的组合
  • TRADITIONAL:等同于STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION的组合
  • MSSQL:等同于PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS和NO_FIELD_OPTIONS的组合
  • DB2:等同于PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS和NO_FIELD_OPTIONS的组合
  • MYSQL323:等同于NO_FIELD_OPTIONS和HIGH_NOT_PRECEDENCE的组合
  • MYSQL40:等同于NO_FIELD_OPTIONS和HIGH_NOT_PRECEDENCE的组合
  • MAXDB:等同于PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS和NO_AUTO_CREATE_USER的组合

MySQL属性SQL_MODE学习笔记的更多相关文章

  1. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  2. mySQl数据库的学习笔记

    mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...

  3. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  4. PHP和MySQL Web开发学习笔记介绍

    前言 从2016年2月1日开始,之后的几个月左右的时间里,我会写一个系列的PHP和MySQL Web开发的学习笔记.我之前一直从事Java语言的开发工作,最近这段时间非常想学习一门语言,就选择了PHP ...

  5. MySQL索引知识学习笔记

    目录 一.索引的概念 二.索引分类 三.索引用法 四 .索引架构简介 五.索引适用的情况 六.索引不适用的情况 继我的上篇博客:Oracle索引知识学习笔记,再记录一篇MySQL的索引知识学习笔记,本 ...

  6. MySQL字符类型学习笔记

    目录 一.字符集和字符编码 1.1.字符集 1.2.字符编码 二.字符集排序规则 2.1.排序规则定义 2.2 .排序规则特征 三.CHAR和VARCHAR 3.1.CHAR类型 3.2.VARCHA ...

  7. mySql 基本语法学习笔记

     create database if not exists yang;    drop database if exists yang;     show databases;   show dat ...

  8. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  9. mysql性能优化学习笔记(2)如何发现有问题的sql

    一.使用mysql慢查询日志对有效率问题的sql进行监控      1)开启慢查询       show variables like ‘slow_query_log’;//查看是否开启慢查询日志   ...

随机推荐

  1. USB OTG ID 检测原理【转】

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...

  2. 关于thymeleaf中th:if的使用

    运用于判断表达式中时,关系判断使用 gt / ge / eq / lt / le / ne (即:使用缩写) gt: great than(大于)> ge: great equal(大于等于)& ...

  3. 一个简单的WebServer,socket+threading

    一个简单的WebServer import socket import threading body = '<h1> web server </h1>' response_pa ...

  4. SpringData JPA实现增删改

    一.创建实体类并自动生成数据库表 二.dao层继承JpaRepository 三.controller中增加操作 四.controller中删除操作 五.controller中修改操作

  5. Java题库——Chapter11 继承和多态

    1)Analyze the following code: public class Test { public static void main(String[ ] args) { B b = ne ...

  6. [Spring cloud 一步步实现广告系统] 12. 广告索引介绍

    索引设计介绍 在我们广告系统中,为了我们能更快的拿到我们想要的广告数据,我们需要对广告数据添加类似于数据库index一样的索引结构,分两大类:正向索引和倒排索引. 正向索引 通过唯一键/主键生成与对象 ...

  7. .Netcore Swagger - 解决外部库导致的“Actions require an explicit HttpMethod binding for Swagger 2.0”

    现象: 项目中导入Ocelot后,swagger页面无法正常显示,查看异常发现 Ocelot.Raft.RaftController 中的 Action 配置不完全,swagger扫描时不能正确生成 ...

  8. Selenium(三):操控元素的基本方法

    1. 操控元素的基本方法 选择到元素之后,我们的代码会返回元素对应的 WebElement对象,通过这个对象,我们就可以操控元素了. 操控元素通常包括: 点击元素 在元素中输入字符串,通常是对输入框这 ...

  9. BeautifulSoup的重要操作

    BeautifulSoup相关概念总结:https://www.cnblogs.com/pythonywy/p/11134481.html css基础以及选择器基础:https://www.cnblo ...

  10. Java生鲜电商平台-电商数据运营统计与分析

    Java生鲜电商平台-电商数据运营统计与分析 今天分享将会分为以下几个方面来阐述: 1. 作为运营我们需要统计与分析的几个核心数据是什么? 2. 核心数据对业务的指导价值在哪里呢? 3. 作为产品PM ...