与其它数据库不同,MySQL 服务器可以在不同的 SQL 模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 sql\_mode 系统变量的值。
SQL 模式定义了 MySQL 数据库所支持的 SQL 语法和数据校验(数据验证检查),这样可以更容易的在不同环境下使用 MySQL。
在 MySQL 中,SQL 模式常用来解决下面几类问题:
* 通过设置 SQL Mode,可以完成不同严格程度的数据校验,有效地保障了数据的准确性。
* 通过设置 SQL Mode 为 ANSI 模式,可以保证大多数 SQL 符合标准的 SQL 语法,使不同数据库之间进行迁移时,不需要进行较大的修改。
* 在不同数据库之间进行数据迁移之前,设置 SQL Mode 可以使 MySQL 中的数据更方便地迁移到目标数据库中。
## sql\_mode 系统变量的常用值
下面列出了几种 SQL 模式常用的值。
#### 1) TRICT\_ ALL\_TABLES 和 STRICT\_ TRANS\_TABLES
如果将 sql\_mode 的值设置为 TRICT\_ALL\_TABLES 和 STRICT\_TRANS\_TABLES,那么 MySQL将启用“严格”模式。在严格模式下,MySQL 服务器会更加严格地对待接收到的不合格数据,它不会把这些不合格的数据转换为最为接近的有效值,而是会拒绝接收它们。
简单来说 MySQL 的严格模式就是 MySQL 自身对数据进行的严格校验,例如格式、长度和类型等。
#### 2) TRADITIONAL
类似于严格模式,但是对于插入的不合格值会给出错误而不是警告。可以应用在事务表和非事务表,用于事务表时,只要出现错误就会立即回滚。
如果你使用的是非事务存储引擎,建议不要把 SQL Mode 值设置为 TRADITIONAL,因为出现错误前进行的操作不会回滚,这样会导致操作只进行了一部分。
#### 3) ANSI\_QUOTES
MySQL 服务器会把双引号识别为一个标识符引用字符,而不是字符串的引号字符。所以在启用 ANSI\_QUOTES 时,不能用双引号来引用字符串。
#### 4) PIPES\_ AS\_ CONCAT
会让 MySQL 服务器把`||`当成一个标准的 SQL 字符串连接运算符,而不会把它当成是 OR 运算符的同义词。
在 Oracle 等数据库中,`||`被视为字符串的连接操作符,所以在其它数据库中含有`||`操作符的 SQL 在 MySQL 中将无法执行,为了解决这个问题,MySQL 提供了这个值。
#### 5) ANSI
会同时启用 ANSI\_QUOTES、PIPES\_ AS\_CONCAT 和其它的几个模式值,使 MySQL 服务器的行为比它的默认运行状态更接近于标准 SQL。
## 如何设置 sql\_mode
在设置 SQL 模式时,需要指定一个由单个模式值或多个模式值(多个模式值用逗号分隔)构成的值,或者指定一个空字符串,用以清除该值。模式值不区分大小写。
如果想在启动服务器时设置 SQL 模式,那么可以在 mysqld 命令行,或者在某个选项文件里设置系统变量 sql\_mode。可以使用下面语句:
sql\_mode= "TRADITIONAL "
sql\_mode= "ANSI\_ QUOTES, PIPES\_ AS\_ CONCAT"
如果只是想在运行时更改 SQL 模式,那么可以使用 SET 语句来设置 sql\_mode 系统变量。
SET sql\_mode = ' TRADITIONAL' ;
如果想设置全局性的 SQL 模式,则需要加上 GLOBAL 关键字:
SET GLOBAL sql\_mode = ' TRADITIONAL';
设置全局变量需要具备 SUPER 管理权限。新设置的全局变量值将成为此后连入客户端的默认 SQL 模式。
如果想获取当前会话或全局的 SQL 模式值,则可以使用如下语句:
SELECT @@SESSION.sql\_mode;
SELECT @@GLOBAL. sql\_mode;
其返回值由当前启用的所有模式构成,两个模式之间以逗号隔开。如果当前没有启用任何模式,则返回一个空值。
- 数据库入门
- 1.常用的数据库
- 2.数据管理技术的3个发展阶段
- 3.数据库是什么?关系型数据库和非关系型数据库又是什么?
- 4.为什么要使用数据库?
- 5.数据库系统是什么?它由哪几部分组成?
- 6.常用数据库访问接口简介
- 7.数据库的种类有哪些?
- 8.几种常用的数据库
- 9.MySQL是什么
- 10.MySQL适用于哪些场景?
- 11.学MySQL前,需要了解这些数据库专业术语
- 12.MySQL客户端和服务器架构(C/S架构)
- 13.明白了MySQL内部结构才能成为高手!
- 14.如何学习数据库(新手必看)?
- 15.小白学习MySQL需要多长时间,能从事哪方面的工作?
- 16.当前市场对数据库程序员的需求如何?待遇如何?
- 17.DBA到底要做什么,成为一名DBA需要具备什么能力?
- 一、数据库的概念和常用工具
- 二、MySQL规范、配置及登录退出操作
- 三、MySQL中的数据类型
- 四、数据库增查改删等操作
- 五、数据表增查改删操作
- 六、MySQL数据增查改删操作
- 七、MySQL存储引擎
- 八、MySQL常用函数
- MySQL的安装和配置
- 1.MySQL 5.7的新特性(新功能)
- 2.MySQL下载步骤详解
- 3.MySQL安装配置教程(Windows系统)
- 4.MySQL免安装版配置教程
- 5.MySQL配置环境变量
- 6.安装MySQL后,如何判断是否已安装成功
- 7.启动MySQL服务的两种方式(图解)
- 8.登录MySQL数据库
- 9.对Linux MySQL软件包的一些说明
- 10.Linux CentOS卸载MySQL(Linux安装MySQL前的准备)
- 11.Linux安装配置MySQL详细步骤
- 12.MySQL my.cnf配置文件详解
- 13.MySQL常用图形化管理工具
- 14.MySQL安装后的目录结构介绍
- 15.MySQL数据库文件存放目录结构详解
- 16.MySQL配置文件(my.ini)详解
- 17.与其它数据库不同,MySQL可以在不同的SQL模式下运行
- 18.MySql Command Line Client闪退原因及解决方案
- MySQL数据库的基本操作
- 1.SQL是什么?它能做什么?
- 2.SQL的基本书写规则
- 3.MySQL查看或显示数据库(SHOW DATABASES语句)
- 4.MySQL创建数据库(CREATE DATABASE语句)
- 5.MySQL修改数据库:ALTER DATABASE用法简介
- 6.MySQL删除数据库(DROP DATABASE语句)
- 7.MySQL选择数据库(MySQL USE语句)
- 8.MySQL注释:单行注释和多行注释
- 9.MySQL中SQL语句的大小写规则
- 10.如何查看MySQL系统帮助?
- 11.看懂SQL错误代码,提高学习效率!
- 数据库高级
- 一、视图的操作
- 二、触发器的操作
- 三、事务的操作
- 四、索引的操作
- 五、存储过程的操作
- 六、数据库的优化方案
- 1.分库、分表和索引
- 2.读写分离和查询优化
- 3.join代替子查询
- 4.尽量使用短小的事务
- 5.常用小技巧
- MySQL使用注意事项
- 1.字符乱码及连接驱动