《Mysql應(yīng)用Mysql SQL服務(wù)器模式介紹》要點(diǎn):
本文介紹了Mysql應(yīng)用Mysql SQL服務(wù)器模式介紹,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL學(xué)習(xí)mysql SQL服務(wù)器模式
MYSQL學(xué)習(xí)MySQL服務(wù)器可以以不同的SQL模式來(lái)操作,并且可以為不同客戶端應(yīng)用不同模式.這樣每個(gè)應(yīng)用程序可以根據(jù)本身的需求來(lái)定制服務(wù)器的操作模式.
MYSQL學(xué)習(xí)模式定義MySQL應(yīng)支持哪些SQL語(yǔ)法,以及應(yīng)執(zhí)行哪種數(shù)據(jù)驗(yàn)證檢查.這樣可以更容易地在分歧的環(huán)境中使用MySQL,并結(jié)合其它數(shù)據(jù)庫(kù)服務(wù)器使用MySQL.
MYSQL學(xué)習(xí)你可以用--sql-mode="modes"選項(xiàng)啟動(dòng)mysqld來(lái)設(shè)置默認(rèn)SQL模式.如果你想要重設(shè),該值還可以為空(--sql-mode ="").
MYSQL學(xué)習(xí)你還可以在啟動(dòng)后用SET [SESSION|GLOBAL] sql_mode='modes'語(yǔ)句設(shè)置sql_mode變量來(lái)更改SQL模式.設(shè)置GLOBAL變量時(shí)需要擁有SUPER權(quán)限,并且會(huì)影響從那時(shí)起連接的所有客戶端的操作.設(shè)置SESSION變量只影響當(dāng)前的客戶端.任何客戶端可以隨時(shí)更改本身的會(huì)話 sql_mode值.
MYSQL學(xué)習(xí)Modesis是用逗號(hào)(‘,')間隔開(kāi)的一系列分歧的模式.你可以用SELECT @@sql_mode語(yǔ)句查詢當(dāng)前的模式.默認(rèn)值是空(沒(méi)有設(shè)置任何模式).
MYSQL學(xué)習(xí)主要重要sql_mode值
MYSQL學(xué)習(xí)?ANSI
MYSQL學(xué)習(xí)變動(dòng)語(yǔ)法和行為,使其更符合標(biāo)準(zhǔn)SQL.
MYSQL學(xué)習(xí)?STRICT_TRANS_TABLES
MYSQL學(xué)習(xí)如果不克不及將給定的值插入到事務(wù)表中,則放棄該語(yǔ)句.對(duì)于非事務(wù)表,如果值出現(xiàn)在單行語(yǔ)句或多行語(yǔ)句的第1行,則放棄該語(yǔ)句.本節(jié)后面給出了更詳細(xì)的描述.
MYSQL學(xué)習(xí)?TRADITIONAL
MYSQL學(xué)習(xí)Make MySQL的行為象“傳統(tǒng)”SQL數(shù)據(jù)庫(kù)系統(tǒng).該模式的簡(jiǎn)單描述是當(dāng)在列中插入不正確的值時(shí)“給出錯(cuò)誤而不是警告”.注釋:一旦發(fā)現(xiàn)錯(cuò)誤立即放棄INSERT/UPDATE.如果你使用非事務(wù)存儲(chǔ)引擎,這種方式不是你想要的,因?yàn)槌霈F(xiàn)錯(cuò)誤前進(jìn)行的數(shù)據(jù)變動(dòng)不會(huì)“滾動(dòng)”,結(jié)果是更新“只進(jìn)行了一部分”.
MYSQL學(xué)習(xí)本手冊(cè)指“嚴(yán)格模式”,表現(xiàn)至少STRICT _TRANS_TABLES或STRICT _ALL_TABLES被啟用的模式.
MYSQL學(xué)習(xí)下面描述了支持的所有模式:
MYSQL學(xué)習(xí)?ALLOW_INVALID_DATES
MYSQL學(xué)習(xí)在嚴(yán)格模式下不要檢查全部日期.只檢查1到12之間的月份和1到31之間的日.這在Web應(yīng)用程序中,當(dāng)你從三個(gè)不同的字段獲取年、月、日,并且想要確切保留用戶插入的內(nèi)容(不進(jìn)行日期驗(yàn)證)時(shí)很重要.該模式適用于DATE和DATETIME列.不適合TIMESTAMP列,TIMESTAMP列需要驗(yàn)證日期.
MYSQL學(xué)習(xí)啟用嚴(yán)格模式后,服務(wù)器必要合法的月和日,不僅僅是分別在1到12和1到31范圍內(nèi).例如,禁用嚴(yán)格模式時(shí)'2004-04-31'是合法的,但啟用嚴(yán)格模式后是非法的.要想在嚴(yán)格模式允許遮掩固定日期,還應(yīng)啟用ALLOW_INVALID_DATES.
MYSQL學(xué)習(xí)?ANSI_QUOTES
MYSQL學(xué)習(xí)將‘"'視為辨認(rèn)符引號(hào)(‘`'引號(hào)字符),不要視為字符串的引號(hào)字符.在ANSI模式,你可以仍然使用‘`'來(lái)引用辨認(rèn)符.啟用ANSI_QUOTES后,你不能用雙引號(hào)來(lái)引用字符串,因?yàn)樗唤忉尀楸嬲J(rèn)符.
MYSQL學(xué)習(xí)?ERROR_FOR_DIVISION_BY_ZERO
MYSQL學(xué)習(xí)在嚴(yán)格模式,在INSERT或UPDATE過(guò)程中,如果被零除(或MOD(X,0)),則產(chǎn)生錯(cuò)誤(不然為警告).如果未給出該模式,被零除時(shí)MySQL返回NULL.如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結(jié)果為NULL.
MYSQL學(xué)習(xí)?HIGH_NOT_PRECEDENCE
MYSQL學(xué)習(xí)NOT操作符的優(yōu)先順序是表達(dá)式例如NOT a BETWEEN b AND c被解釋為NOT (a BETWEEN b AND c).在一些舊版本MySQL中, 表達(dá)式被解釋為(NOT a) BETWEEN b AND c.啟用HIGH_NOT_PRECEDENCESQL模式,可以獲得以前的更高優(yōu)先級(jí)的成果.
MYSQL學(xué)習(xí)?IGNORE_SPACE
MYSQL學(xué)習(xí)允許函數(shù)名和‘('之間有空格.強(qiáng)制將所有函數(shù)名視為保存的字.結(jié)果是,如果你想要拜訪保存為字的數(shù)據(jù)庫(kù)、表或列名,你必須引用它.例如,因?yàn)橛蠻SER()函數(shù),mysql數(shù)據(jù)庫(kù)中的user表名和該表內(nèi)的User列被保存下來(lái),因此你必須引用它們:
MYSQL學(xué)習(xí)?NO_AUTO_CREATE_USER
MYSQL學(xué)習(xí)防止GRANT自動(dòng)創(chuàng)建新用戶,除非還指定了暗碼.
MYSQL學(xué)習(xí)?NO_AUTO_VALUE_ON_ZERO
MYSQL學(xué)習(xí)NO_AUTO_VALUE_ON_ZERO影響AUTO_INCREMENT列的處置.一般情況,你可以向該列插入NULL或0生成下一個(gè)序列號(hào).NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一個(gè)序列號(hào).
MYSQL學(xué)習(xí)如果將0保存到表的AUTO_INCREMENT列,該模式會(huì)很有用.(不推薦采用該慣例).例如,如果你用mysqldump轉(zhuǎn)儲(chǔ)表并重載,MySQL遇到0值一般會(huì)生成新的序列號(hào),生成的表的內(nèi)容與轉(zhuǎn)儲(chǔ)的表不同.重載轉(zhuǎn)儲(chǔ)文件前啟用NO_AUTO_VALUE_ON_ZERO可以辦理該問(wèn)題.mysqldump在輸出中自動(dòng)包括啟用NO_AUTO_VALUE_ON_ZERO的語(yǔ)句.
MYSQL學(xué)習(xí)?NO_BACKSLASH_ESCAPES
MYSQL學(xué)習(xí)禁用反斜線字符(‘\')做為字符串內(nèi)的退出字符.啟用該模式,反斜線則成為普通字符.
MYSQL學(xué)習(xí)?NO_DIR_IN_CREATE
MYSQL學(xué)習(xí)創(chuàng)立表時(shí),忽視所有INDEX DIRECTORY和DATA DIRECTORY指令.該選項(xiàng)對(duì)從復(fù)制服務(wù)器有用.
MYSQL學(xué)習(xí)?NO_ENGINE_SUBSTITUTION
MYSQL學(xué)習(xí)如果必要的存儲(chǔ)引擎被禁用或未編譯,可以防止自動(dòng)替換存儲(chǔ)引擎.
MYSQL學(xué)習(xí)?NO_FIELD_OPTIONS
MYSQL學(xué)習(xí)不要在SHOW CREATE TABLE的輸出中打印MySQL專用列選項(xiàng).該模式在可移植模式(portability mode)下用于mysqldump.
MYSQL學(xué)習(xí)?NO_KEY_OPTIONS
MYSQL學(xué)習(xí)不要在SHOW CREATE TABLE的輸出中打印MySQL專用索引選項(xiàng).該模式在可移植模式(portability mode)下用于mysqldump.
MYSQL學(xué)習(xí)?NO_TABLE_OPTIONS
MYSQL學(xué)習(xí)不要在SHOW CREATE TABLE的輸出中打印MySQL專用表選項(xiàng)(例如ENGINE).該模式在可移植模式(portability mode)下用于mysqldump.
MYSQL學(xué)習(xí)?NO_UNSIGNED_SUBTRACTION
MYSQL學(xué)習(xí)在減運(yùn)算中,如果某個(gè)操作數(shù)沒(méi)有符號(hào),不要將結(jié)果標(biāo)志為UNSIGNED.請(qǐng)注意這樣使UNSIGNED BIGINT不能100%用于上下文中.參見(jiàn)12.8節(jié),“Cast函數(shù)和操作符”.
MYSQL學(xué)習(xí)?NO_ZERO_DATE
MYSQL學(xué)習(xí)在嚴(yán)格模式,不要將 '0000-00-00'做為合法日期.你仍然可以用IGNORE選項(xiàng)插入零日期.在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告.
MYSQL學(xué)習(xí)?NO_ZERO_IN_DATE
MYSQL學(xué)習(xí)在嚴(yán)格模式,不接受月或日部門為0的日期.如果使用IGNORE選項(xiàng),我們?yōu)轭愃频娜掌诓迦?0000-00-00'.在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告.
MYSQL學(xué)習(xí)?ONLY_FULL_GROUP_BY
MYSQL學(xué)習(xí)不要讓GROUP BY部門中的查詢指向未選擇的列.
MYSQL學(xué)習(xí)?PIPES_AS_CONCAT
MYSQL學(xué)習(xí)將||視為字符串連接操作符(+)(同CONCAT()),而不視為OR.
MYSQL學(xué)習(xí)?REAL_AS_FLOAT
MYSQL學(xué)習(xí)將REAL視為FLOAT的同義詞,而不是DOUBLE的同義詞.
MYSQL學(xué)習(xí)?STRICT_TRANS_TABLES
MYSQL學(xué)習(xí)為所有存儲(chǔ)引擎啟用嚴(yán)格模式.非法數(shù)據(jù)值被拒絕.后面有詳細(xì)闡明.
MYSQL學(xué)習(xí)?STRICT_TRANS_TABLES
MYSQL學(xué)習(xí)為事務(wù)存儲(chǔ)引擎啟用嚴(yán)格模式,也可能為非事務(wù)存儲(chǔ)引擎啟用嚴(yán)格模式.后面有詳細(xì)闡明.
MYSQL學(xué)習(xí)嚴(yán)格模式控制MySQL如何處理非法或丟失的輸入值.有幾種原因可以使一個(gè)值為非法.例如,數(shù)據(jù)類型錯(cuò)誤,不適合列,或超出范圍.當(dāng)新插入的行不包括某列的沒(méi)有顯示定義DEFAULT子句的值,則該值被丟失.
MYSQL學(xué)習(xí)對(duì)于事務(wù)表,當(dāng)啟用STRICT_ALL_TABLES或STRICT_TRANS_TABLES模式時(shí),如果語(yǔ)句中有非法或丟失值,則會(huì)出現(xiàn)差錯(cuò).語(yǔ)句被放棄并滾動(dòng).
MYSQL學(xué)習(xí)對(duì)于非事務(wù)表,如果插入或更新的第1行出現(xiàn)壞值,兩種模式的行為相同.語(yǔ)句被放棄,表堅(jiān)持不變.如果語(yǔ)句插入或修改多行,并且壞值出現(xiàn)在第2或后面的行,結(jié)果取決于啟用了哪個(gè)嚴(yán)格選項(xiàng):
MYSQL學(xué)習(xí)?對(duì)于STRICT_ALL_TABLES,MySQL返回錯(cuò)誤并忽視剩余的行.但是,在這種情況下,前面的行已經(jīng)被插入或更新.這說(shuō)明你可以部分更新,這可能不是你想要的.要避免這點(diǎn),最好使用單行語(yǔ)句,因?yàn)檫@樣可以不變動(dòng)表即可以放棄.
MYSQL學(xué)習(xí)?對(duì)于STRICT_TRANS_TABLES,MySQL將非法值轉(zhuǎn)換為最接近該列的合法值并插入調(diào)整后的值.如果值丟失,MySQL在列中插入隱式 默認(rèn)值.在任何情況下,MySQL都會(huì)生成警告而不是給出差錯(cuò)并繼續(xù)執(zhí)行語(yǔ)句.13.1.5節(jié),“CREATE TABLE語(yǔ)法”描述了隱式默認(rèn)值.
MYSQL學(xué)習(xí)嚴(yán)格模式不允許非法日期,例如'2004-04-31'.它不允許禁止日期使用“零”部門,例如'2004-04-00'或“零”日期.要想禁止,應(yīng)在嚴(yán)格模式基礎(chǔ)上,啟用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL模式.
MYSQL學(xué)習(xí)如果你不使用嚴(yán)格模式(即不啟用STRICT_TRANS_TABLES或STRICT_ALL_TABLES模式),對(duì)于非法或喪失的值,MySQL將插入調(diào)整后的值并給出警告.在嚴(yán)格模式,你可以通過(guò)INSERT IGNORE或UPDATE IGNORE來(lái)實(shí)現(xiàn).參見(jiàn)13.5.4.22節(jié),“SHOW WARNINGS語(yǔ)法”.
《Mysql應(yīng)用Mysql SQL服務(wù)器模式介紹》是否對(duì)您有啟發(fā),歡迎查看更多與《Mysql應(yīng)用Mysql SQL服務(wù)器模式介紹》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/10500.html