前言
SQL模式影響MySQL支持的SQL語法和執行的數據驗證檢查。
MySQL服務器可以在不同的SQL模式下運行,并且可以針對不同的客戶端以不同的方式應用這些模式,具體取決于sql_mode系統變量的值。DBA可以設置全局SQL模式以匹配站點服務器操作要求,并且每個應用程序可以將其會話SQL模式設置為其自己的要求。
模式會影響MySQL支持的SQL語法以及它執行的數據驗證檢查。這使得在不同環境中使用MySQL以及將MySQL與其他數據庫服務器一起使用變得更加容易。
下面話不多說了,來一起看看詳細的介紹吧
設置SQL模式
要在運行時更改SQL模式,請sql_mode使用以下SET 語句設置全局或會話 系統變量
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';
模式列表
模式 |
注釋 |
ALLOW_INVALID_DATES |
無效日期會生成錯誤 |
ERROR_FOR_DIVISION_BY_ZERO |
除0錯誤 |
NO_BACKSLASH_ESCAPES |
禁止使用反斜杠字符(\)作為字符串中的轉義字符。啟用此模式后,反斜杠就像其他任何一個普通字符一樣。 |
NO_UNSIGNED_SUBTRACTION |
在整數值之間減去(其中一個是類型) UNSIGNED,默認情況下會產生無符號結果。如果結果否則為負,則會導致錯誤 |
NO_ZERO_IN_DATE |
'0000-00-00' 則允許并且插入產生警告 |
ONLY_FULL_GROUP_BY |
select 內指定字段必須出現在 groupby 中,否則錯誤 |
STRICT_TRANS_TABLES |
為事務存儲引擎啟用嚴格的SQL模式,并在可能的情況下為非事務性存儲引擎啟用。 |
STRICT_ALL_TABLES |
為所有存儲引擎啟用嚴格SQL模式。無效的數據值被拒絕。 |
詳情請參考 https://dev.mysql.com/doc/ref...
嚴格SQL模式
MySQL服務器可以在不同的SQL模式下運行,并且可以針對不同的客戶端以不同的方式應用這些模式,具體取決于sql_mode系統變量的值。在嚴格SQL模式下,服務器會將某些警告升級為錯誤。
嚴格SQL模式適用于以下語句
- ALTER TABLE
- CREATE TABLE
- CREATE TABLE ... SELECT
- DELETE
- INSERT
- LOAD DATA
- LOAD XML
- SELECT SLEEP()
- UPDATE
在存儲的程序中,如果在嚴格模式生效時定義了程序,則列出的類型的單個語句將以嚴格的SQL模式執行。
嚴格的SQL模式適用于以下錯誤,表示輸入值無效或缺失的一類錯誤。如果值具有錯誤的列數據類型或可能超出范圍,則該值無效。如果要插入的新行不包含其定義中NOT NULL沒有顯式DEFAULT子句的列的值,則缺少值。
- ER_BAD_NULL_ERROR
- ER_CUT_VALUE_GROUP_CONCAT
- ER_DATA_TOO_LONG
- ER_DATETIME_FUNCTION_OVERFLOW
- ER_DIVISION_BY_ZERO
- ER_INVALID_ARGUMENT_FOR_LOGARITHM
- ER_NO_DEFAULT_FOR_FIELD
- ER_NO_DEFAULT_FOR_VIEW_FIELD
- ER_TOO_LONG_KEY
- ER_TRUNCATED_WRONG_VALUE
- ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
- ER_WARN_DATA_OUT_OF_RANGE
- ER_WARN_NULL_TO_NOTNULL
- ER_WARN_TOO_FEW_RECORDS
- ER_WRONG_ARGUMENTS
- ER_WRONG_VALUE_FOR_TYPE
- WARN_DATA_TRUNCATED
致謝
感謝你看到這里,希望本篇文章可以幫到你,謝謝。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- 如何開啟mysql中的嚴格模式
- 學習SQL語句(強大的group by與select from模式)
- 老生常談MYSQL模式匹配 REGEXP和like的用法
- Mysql SQL服務器模式介紹
- PHP基于單例模式實現的mysql類
- NoSQL反模式 - 文檔數據庫篇
- mysql中binlog_format模式與配置詳細分析
- mysql啟用skip-name-resolve模式時出現Warning的處理辦法