MySQL中SQL模式的特點(diǎn)總結(jié)
前言
SQL模式影響MySQL支持的SQL語法和執(zhí)行的數(shù)據(jù)驗(yàn)證檢查。
MySQL服務(wù)器可以在不同的SQL模式下運(yùn)行,并且可以針對不同的客戶端以不同的方式應(yīng)用這些模式,具體取決于sql_mode系統(tǒng)變量的值。DBA可以設(shè)置全局SQL模式以匹配站點(diǎn)服務(wù)器操作要求,并且每個應(yīng)用程序可以將其會話SQL模式設(shè)置為其自己的要求。
模式會影響MySQL支持的SQL語法以及它執(zhí)行的數(shù)據(jù)驗(yàn)證檢查。這使得在不同環(huán)境中使用MySQL以及將MySQL與其他數(shù)據(jù)庫服務(wù)器一起使用變得更加容易。
下面話不多說了,來一起看看詳細(xì)的介紹吧
設(shè)置SQL模式
要在運(yùn)行時更改SQL模式,請sql_mode使用以下SET 語句設(shè)置全局或會話 系統(tǒng)變量
SET GLOBAL sql_mode = 'modes'; SET SESSION sql_mode = 'modes';
模式列表
| 模式 | 注釋 |
|---|---|
| ALLOW_INVALID_DATES | 無效日期會生成錯誤 |
| ERROR_FOR_DIVISION_BY_ZERO | 除0錯誤 |
| NO_BACKSLASH_ESCAPES | 禁止使用反斜杠字符(\)作為字符串中的轉(zhuǎn)義字符。啟用此模式后,反斜杠就像其他任何一個普通字符一樣。 |
| NO_UNSIGNED_SUBTRACTION | 在整數(shù)值之間減去(其中一個是類型) UNSIGNED,默認(rèn)情況下會產(chǎn)生無符號結(jié)果。如果結(jié)果否則為負(fù),則會導(dǎo)致錯誤 |
| NO_ZERO_IN_DATE | '0000-00-00' 則允許并且插入產(chǎn)生警告 |
| ONLY_FULL_GROUP_BY | select 內(nèi)指定字段必須出現(xiàn)在 groupby 中,否則錯誤 |
| STRICT_TRANS_TABLES | 為事務(wù)存儲引擎啟用嚴(yán)格的SQL模式,并在可能的情況下為非事務(wù)性存儲引擎啟用。 |
| STRICT_ALL_TABLES | 為所有存儲引擎啟用嚴(yán)格SQL模式。無效的數(shù)據(jù)值被拒絕。 |
詳情請參考 https://dev.mysql.com/doc/ref...
嚴(yán)格SQL模式
MySQL服務(wù)器可以在不同的SQL模式下運(yùn)行,并且可以針對不同的客戶端以不同的方式應(yīng)用這些模式,具體取決于sql_mode系統(tǒng)變量的值。在嚴(yán)格SQL模式下,服務(wù)器會將某些警告升級為錯誤。
嚴(yán)格SQL模式適用于以下語句
- ALTER TABLE
- CREATE TABLE
- CREATE TABLE ... SELECT
- DELETE
- INSERT
- LOAD DATA
- LOAD XML
- SELECT SLEEP()
- UPDATE
在存儲的程序中,如果在嚴(yán)格模式生效時定義了程序,則列出的類型的單個語句將以嚴(yán)格的SQL模式執(zhí)行。
嚴(yán)格的SQL模式適用于以下錯誤,表示輸入值無效或缺失的一類錯誤。如果值具有錯誤的列數(shù)據(jù)類型或可能超出范圍,則該值無效。如果要插入的新行不包含其定義中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
致謝
感謝你看到這里,希望本篇文章可以幫到你,謝謝。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法分析
這篇文章主要介紹了mysql存儲過程之循環(huán)語句(WHILE,REPEAT和LOOP)用法,結(jié)合實(shí)例形式分析了mysql存儲過程循環(huán)語句WHILE,REPEAT和LOOP的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
MySQL 處理插入過程中的主鍵唯一鍵重復(fù)值的解決方法
本篇文章主要介紹在插入數(shù)據(jù)到表中遇到鍵重復(fù)避免插入重復(fù)值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧2016-04-04
MySQL千萬級數(shù)據(jù)的大表優(yōu)化解決方案
mysql數(shù)據(jù)庫中的表數(shù)據(jù)量幾千萬后,查詢速度會很慢,日常各種卡慢,嚴(yán)重影響使用體驗(yàn)。在考慮升級數(shù)據(jù)庫或者換用大數(shù)據(jù)解決方案前,必須優(yōu)化現(xiàn)有mysql數(shù)據(jù)庫表設(shè)計(jì)和sql語句。2022-11-11
DataGrip的MySQL數(shù)據(jù)導(dǎo)出和導(dǎo)入操作超詳細(xì)指南
很多時候我們會遇到需要將本機(jī)數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出或者其他數(shù)據(jù)庫數(shù)據(jù)的導(dǎo)入操作,這篇文章主要給大家介紹了關(guān)于DataGrip的MySQL數(shù)據(jù)導(dǎo)出和導(dǎo)入操作超詳細(xì)指南,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
linux下mysql自動備份數(shù)據(jù)庫與自動刪除臨時文件
mysql自動備份數(shù)據(jù)庫與自動刪除臨時文件,有需要的朋友可以參考下2013-02-02
關(guān)于數(shù)據(jù)庫連接池Druid使用說明
這篇文章主要介紹了關(guān)于數(shù)據(jù)庫連接池Druid使用說明,涉及Druid 參數(shù)和運(yùn)行原理等等相關(guān)內(nèi)容,小編覺得挺不錯的,在這里給大家分享一下。2017-10-10
SQL實(shí)現(xiàn)LeetCode(176.第二高薪水)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(176.第二高薪水),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
mysql_connect(): Connection using old (pre-4.1.1) authentica
MySQL錯誤提示:Connection using old (pre-4.1.1) authentication protocol refused (client option ‘secure_auth’ enabled)解決辦法,需要的朋友可以參考下2014-04-04
Mysql 5.6使用配置文件my.ini來設(shè)置長時間連接數(shù)據(jù)庫的問題
這篇文章主要介紹了Mysql 5.6使用配置文件my.ini來設(shè)置長時間連接數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

