mysql sql mode詳解

mysql中,mysql可以使用sql mode來對不同的客戶端進行不同的限制,這依據於sql mode的設置。在mysql中,dba可以做全局sql mode設置,也可以針對一個session做sql mode設置。在主從複製中,主從服務器可分別做sql mode設置,但是建議是主從應該設置一樣,這樣可以避免不必要的問題。
需要注意的是,在innodb引擎中,innodb_strict_mode 參數會對sql有其他的限制,innodb_strict_mode 默認是off的,但是如果是on,當執行一些sql的時候,他就會返回error而不是warning。
sql mode生成與mysql5.6.5,使用 --sql-mode="modes"進行mysql的啓動。在mysql運行時可以使用
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';
進行sql mode的啓動
更改全局或者session的sql mode
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
sql mode 模式
ALLOW_INVALID_DATES :只允許1-12月與1-31號日期,不允許年。
ERROR_FOR_DIVISION_BY_ZERO :不允許整除0
IGNORE_SPACE:允許在“(”中間加空格
 NO_AUTO_CREATE_USER:如非指定,不允許在創建的用戶下自動加權限
NO_AUTO_VALUE_ON_ZERO:通常狀況下,如果插入null或者0,會將字段自增,但是加了這個模式,如果插入0,字段就不會自增了。
 NO_BACKSLASH_ESCAPES:不能加反斜槓(“\”)
NO_DIR_IN_CREATE:創建表時禁止INDEX DIRECTORY 和DATA DIRECTORY 指令。
Strict SQL Mode
Strict SQL Mode控制數據改變語句如(update、insert)其中可能有許多原因,例如:當插入時數據類型錯誤或者是超出了值的範圍。Strict mode也會影響例如create table語句。

例如select語句,在Strict mode下,如果數據是不合法的不會出現錯誤,只會出現警告。

Strict mode不影響外鍵約束










 

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章