MySQL SQL模式特色彙總

clipboard.png

前言

MySQL服務器能夠在不一樣的SQL模式下運行,而且能夠針對不一樣的客戶端以不一樣的方式應用這些模式,具體取決於sql_mode系統變量的值。DBA能夠設置全局SQL模式以匹配站點服務器操做要求,而且每一個應用程序能夠將其會話SQL模式設置爲其本身的要求。html

模式會影響MySQL支持的SQL語法以及它執行的數據驗證檢查。這使得在不一樣環境中使用MySQL以及將MySQL與其餘數據庫服務器一塊兒使用變得更加容易。mysql

設置SQL模式

要在運行時更改SQL模式,請sql_mode使用如下SET 語句設置全局或會話 系統變量sql

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

致謝

感謝你看到這裏,但願本篇文章能夠幫到你,謝謝。🙏spa

相關文章
相關標籤/搜索