1. 程式人生 > 資料庫 >MySQL中SQL模式的特點總結

MySQL中SQL模式的特點總結

前言

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

致謝

感謝你看到這裡,希望本篇文章可以幫到你,謝謝。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。