與其它數據庫不同,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.字符亂碼及連接驅動