欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL sql_mode的使用詳解

 更新時間:2021年05月08日 11:44:50   作者:brightdeng@DBA·DBA  
這篇文章主要介紹了MySQL sql_mode的使用詳解,幫助大家更好的理解和學習使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下

前言

相信看過上一篇文章《MySQL案例:一個數(shù)據(jù)丟失慘案》的童鞋,都應該意識到,sql_mode是一個非常關鍵的配置,接下來就帶來該配置項的詳細解析。

sql_mode詳解

sql_mode,會直接影響SQL語法支持和數(shù)據(jù)校驗,它包含非常多的選項,其中5.7版本的默認值是

“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”

,一般不建議進行修改。

最重要的選項

sql_mode最重要的選項,包括以下3個:

(1)ANSI:該選項決定SQL語法支持,設置為ANSI,會更加遵守標準SQL語法。

(2)STRICT_TRANS_TABLES:該選項決定數(shù)據(jù)校驗;對于事務性存儲引擎,當出現(xiàn)非法值時,該事務會失敗并回滾;對于非事務性存儲引擎,如果非法值出現(xiàn)在第一行,那么該事務會失敗,如果非法值出現(xiàn)在中間,那么會調整非法值,并拋出告警。

(3)TRADITIONAL:該選項決定與傳統(tǒng)關系型數(shù)據(jù)庫表現(xiàn)一致;對于一些非正常操作,直接報錯失敗而不是告警提示。

全部選項

sql_mode還包括以下選項:

(4)ALLOW_INVALID_DATES:該選項決定不進行嚴格的日期校驗;它只校驗月份范圍是否為1-12、日期范圍是否為1-31,不校驗具體日期是否有效,比如2020-04-31這個非法日期是允許的。

(5)ANSI_QUOTES:該選項決定引用字符;它允許雙引號"作為引用字符,和反引號`一樣。

(6)ERROR_FOR_DIVISION_BY_ZERO:該選項決定被零整除的返回值;如果不啟用,那么被零整除的返回值為null且不告警;如果啟用但在非嚴格模式下,那么被零整除的返回值為null且產(chǎn)生告警;如果啟用且在嚴格模式下,那么被零整除會直接報錯。

(7)HIGH_NOT_PRECEDENCE:該選項決定not操作的優(yōu)先級;啟用后,NOT a BETWEEN b AND c被解析為NOT (a BETWEEN b AND c);在一些舊版本中,NOT a BETWEEN b AND c被解析為(NOT a) BETWEEN b AND c。

(8)IGNORE_SPACE:該選項決定忽略函數(shù)名和括號之間的空格;啟用后,比如count (*)也不會報錯。

(9)NO_AUTO_CREATE_USER:該選項決定grant語句不會自動創(chuàng)建用戶;已過時,grant語句也不會創(chuàng)建用戶。

(10)NO_AUTO_VALUE_ON_ZERO:該選項決定自增列的生成;一般來說,向自增列插入0或null,系統(tǒng)會自動生成下一個自增值插入;啟用后,向自增列插入0會保留原值0,插入null才會自動生成下一個自增值插入

(11)NO_BACKSLASH_ESCAPES:該選項決定反斜杠\的作用;啟用后,反斜杠\不再作為轉義字符,而是用作普通字符。

(12)NO_DIR_IN_CREATE:該選項決定忽略創(chuàng)建表時,所有的INDEX DIRECTORY和DATA DIRECTORY指令;該選項只在從庫生效。

(13)NO_ENGINE_SUBSTITUTION:該選項決定創(chuàng)建表時,如果指定一個不存在/不支持的存儲引擎,那么會自動轉換為默認存儲引擎。

(14)NO_FIELD_OPTIONS:已過時。

(15)NO_KEY_OPTIONS:已過時。

(16)NO_TABLE_OPTIONS:已過時。

(17)NO_UNSIGNED_SUBTRACTION:一般情況下,整數(shù)之間的減法(其中一個為無符號),結果為無符號,如果結果為負數(shù)則報錯;啟用該選項后,負數(shù)則可以正常處理。

(18)NO_ZERO_DATE:該選項決定‘0000-00-00'是否可以插入;如果不啟用,那么‘0000-00-00'可以插入且不告警;如果啟用但在非嚴格模式下,那么‘0000-00-00'可以插入但會產(chǎn)生告警;如果啟用且在非嚴格模式下,那么‘0000-00-00'不能插入會直接報錯。

(19)NO_ZERO_IN_DATE:該選項決定月份和日期是否可以為00;如果不啟用,那么月份和日期可以為00且不告警;如果啟用但在非嚴格模式下,那么月份和日期可以為00但會產(chǎn)生告警;如果啟用且在非嚴格模式下,那么月份和日期不能為00會直接報錯。

(20)ONLY_FULL_GROUP_BY:該選項決定select/having/order by后面的非聚合字段,必須出現(xiàn)在group by字句中。

(21)PAD_CHAR_TO_FULL_LENGTH:一般情況下,查詢char類型的字段,后面的空洞數(shù)據(jù)會被裁剪;啟用該選項后,查詢char類型的字段,后面的空洞數(shù)據(jù)不會被裁剪。

(22)PIPES_AS_CONCAT:該選項決定將||符號當作字符串的連接操作符,而不是當作OR同義詞。

(23)REAL_AS_FLOAT:該選項決定將REAL當作FLOAT同義詞,而不是DOUBLE同義詞。

(24)STRICT_ALL_TABLES:該選項決定數(shù)據(jù)校驗;對于事務性存儲引擎,當出現(xiàn)非法值時,該事務會失敗并回滾;對于非事務性存儲引擎,如果非法值出現(xiàn)在第一行,那么該事務會失敗,如果非法值出現(xiàn)在中間,那么前面操作會成功、后面操作會直接報錯,出現(xiàn)事務部分成功部分失敗的情況。

總結

通過上面的學習,相信大家對sql_mode各選項,都有較為詳細的了解;關于sql_mode如何設置,個人建議如下:

(1)對于5.5/5.6版本,sql_mode建議參照5.7默認值進行設置;

(2)對于5.7版本,sql_mode保持默認值即可;

(3)對于8.0版本,sql_mode也保持默認值即可。

sql_mode的設置,可以讓MySQL非常靈活地運行在各種不同模式下,但與此同時也帶來各種各樣的風險;在MySQL廣泛應用于各類重要系統(tǒng)的情況下,建議是要對sql_mode進行嚴格審核設置,同時對開發(fā)代碼進行規(guī)范化管理;其實這一點,也可以從官方默認值看出來,隨著MySQL版本的迭代,sql_mode的設置也是越來越嚴格。

以上就是MySQL sql_mode的使用詳解的詳細內(nèi)容,更多關于MySQL sql_mode的使用的資料請關注腳本之家其它相關文章!

相關文章

  • SQL中的聯(lián)合索引和普通索引問題

    SQL中的聯(lián)合索引和普通索引問題

    這篇文章主要介紹了SQL中的聯(lián)合索引和普通索引問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Centos7下使用yum安裝mysql數(shù)據(jù)庫的詳細教程(增強版)

    Centos7下使用yum安裝mysql數(shù)據(jù)庫的詳細教程(增強版)

    這篇文章主要介紹了Centos7下使用yum安裝mysql數(shù)據(jù)庫的詳細教程(增強版),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • MySQL中Binary Log二進制日志文件的基本操作命令小結

    MySQL中Binary Log二進制日志文件的基本操作命令小結

    這篇文章主要介紹了MySQL中Binary Log二進制日志文件的基本操作小結,包括利用二進制日志恢復數(shù)據(jù)的方法,需要的朋友可以參考下
    2015-12-12
  • 一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫操作實例

    一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫操作實例

    這篇文章主要給大家介紹了關于一臺服務器部署兩個獨立的mysql數(shù)據(jù)庫的相關資料,同一臺服務器裝兩個數(shù)據(jù)庫,可以通過虛擬化技術實現(xiàn),文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • MySQL超詳細實現(xiàn)用戶管理實例

    MySQL超詳細實現(xiàn)用戶管理實例

    MySQL 是一個多用戶數(shù)據(jù)庫,具有功能強大的訪問控制系統(tǒng),可以為不同用戶指定不同權限。在前面的章節(jié)中我們使用的是 root 用戶,該用戶是超級管理員,擁有所有權限,包括創(chuàng)建用戶、刪除用戶和修改用戶密碼等管理權限
    2022-06-06
  • MySQL安裝常見報錯處理方法總結大全

    MySQL安裝常見報錯處理方法總結大全

    MySQL數(shù)據(jù)庫在安裝或卸載的過程中,常常會出現(xiàn)一些錯誤,這是件讓我們頭疼的事,下面這篇文章主要給大家介紹了關于MySQL安裝常見報錯處理方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • mysql如何查詢當前數(shù)據(jù)庫中不為空的表

    mysql如何查詢當前數(shù)據(jù)庫中不為空的表

    這篇文章主要介紹了mysql如何查詢當前數(shù)據(jù)庫中不為空的表問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Mysql虛擬列的實現(xiàn)示例

    Mysql虛擬列的實現(xiàn)示例

    MySQL虛擬列是一種特殊的列,是mysql-5.7版本引入的一個新特性,本文主要介紹了Mysql虛擬列的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • MySQL索引使用說明(單列索引和多列索引)

    MySQL索引使用說明(單列索引和多列索引)

    這篇文章主要討論MySQL選擇索引時單列單列索引和多列索引使用,以及多列索引的最左前綴原則,需要的朋友可以參考下
    2018-01-01
  • mysql 聯(lián)合索引生效的條件及索引失效的條件

    mysql 聯(lián)合索引生效的條件及索引失效的條件

    兩個或更多個列上的索引被稱作復合索引,本文主要介紹了mysql 聯(lián)合索引生效的條件及索引失效的條件,感興趣的可以了解一下
    2021-11-11

最新評論