【MySQL】mysql 5.7 sql_mode 參數解析

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.32-log |
+------------+
1 row in set (0.00 sec)

mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

ONLY_FULL_GROUP_BY
對於使用 GROUP BY 進行查詢的SQL,不允許 SELECT 部分出現 GROUP BY 中未出現的字段,
也就是 SELECT 查詢的字段必須是 GROUP BY 中出現的或者使用聚合函數的或者是具有唯一屬性的。

STRICT_TRANS_TABLES
該選項針對事務性存儲引擎生效,對於非事務性存儲引擎無效,該選項表示開啓strict sql模式。
在strict sql模式下,在INSERT或者UPDATE語句中,插入或者更新了某個不符合規定的字段值,則會直接報錯中斷操作

NO_ZERO_IN_DATE
MySQL中插入的時間字段值,不允許日期和月份爲零

NO_ZERO_DATE
MySQL中插入的時間字段值,不允許日期爲零

ERROR_FOR_DIVISION_BY_ZERO
INSERT或者UPDATE語句中,如果數據被0除,則出現警告(非strict sql模式下)或者錯誤(strict sql模式下)。
當該選項關閉時,數字被0除,得到NULL且不會產生警告
當該選項開啓且處於非strict sql模式下,數字被0除,得到NULL但是會產生警告
當該選項開啓且處於strict sql模式下,數字被0除,產生錯誤且中斷操作

NO_AUTO_CREATE_USER
之前版本中使用GRANT語法,如果用戶不存在則會自動創建用戶,該選項限制該功能

NO_ENGINE_SUBSTITUTION
在使用CREATE TABLE或者ALTER TABLE語法執行存儲引擎的時候,如果設定的存儲引擎被禁用或者未編譯,會產生錯誤。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章