• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            SQL服務(wù)器模式

            Posted on 2011-02-18 09:23 S.l.e!ep.¢% 閱讀(390) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DataBase
            SQL服務(wù)器模式
            MySQL服務(wù)器可以以不同的SQL模式來操作,并且可以為不同客戶端應(yīng)用不同模式。這樣每個(gè)應(yīng)用程序可以根據(jù)自己的需求來定制服務(wù)器的操作模式。

            模式定義MySQL應(yīng)支持哪些SQL語法,以及應(yīng)執(zhí)行哪種數(shù)據(jù)驗(yàn)證檢查。這樣可以更容易地在不同的環(huán)境中使用MySQL,并結(jié)合其它數(shù)據(jù)庫服務(wù)器使用MySQL。

            你可以用--sql-mode="modes"選項(xiàng)啟動(dòng)mysqld來設(shè)置默認(rèn)SQL模式。如果你想要重設(shè),該值還可以為空(--sql-mode ="")。

            你還可以在啟動(dòng)后用SET [SESSION|GLOBAL] sql_mode='modes'語句設(shè)置sql_mode變量來更改SQL模式。設(shè)置 GLOBAL變量時(shí)需要擁有SUPER權(quán)限,并且會(huì)影響從那時(shí)起連接的所有客戶端的操作。設(shè)置SESSION變量只影響當(dāng)前的客戶端。任何客戶端可以隨時(shí)更改自己的會(huì)話 sql_mode值。

            Modesis是用逗號(hào)(‘,’)間隔開的一系列不同的模式。你可以用SELECT @@sql_mode語句查詢當(dāng)前的模式。默認(rèn)值是空(沒有設(shè)置任何模式)。

            主要重要sql_mode值為:

            ·? ?? ?? ?ANSI

            更改語法和行為,使其更符合標(biāo)準(zhǔn)SQL。

            ·? ?? ?? ?STRICT_TRANS_TABLES

            如果不能將給定的值插入到事務(wù)表中,則放棄該語句。對(duì)于非事務(wù)表,如果值出現(xiàn)在單行語句或多行語句的第1行,則放棄該語句。本節(jié)后面給出了更詳細(xì)的描述。

            ·? ?? ?? ?TRADITIONAL

            Make MySQL的行為象“傳統(tǒng)”SQL數(shù)據(jù)庫系統(tǒng)。該模式的簡單描述是當(dāng)在列中插入不正確的值時(shí)“給出錯(cuò)誤而不是警告”。注釋:一旦發(fā)現(xiàn)錯(cuò)誤立即放棄INSERT/UPDATE。如果你使用非事務(wù)存儲(chǔ)引擎,這種方式不是你想要的,因?yàn)槌霈F(xiàn)錯(cuò)誤前進(jìn)行的數(shù)據(jù)更改不會(huì)“滾動(dòng)”,結(jié)果是更新“只進(jìn)行了一部分”。

            本手冊(cè)指“嚴(yán)格模式”,表示至少STRICT _TRANS_TABLES或STRICT _ALL_TABLES被啟用的模式。

            下面描述了支持的所有模式:

            ·? ?? ?? ?ALLOW_INVALID_DATES

            在嚴(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)證日期。

            啟用嚴(yán)格模式后,服務(wù)器需要合法的月和日,不僅僅是分別在1到12和1到31范圍內(nèi)。例如,禁用嚴(yán)格模式時(shí)'2004-04-31'是合法的,但啟用嚴(yán)格模式后是非法的。要想在嚴(yán)格模式允許遮掩固定日期,還應(yīng)啟用ALLOW_INVALID_DATES。

            ·? ?? ?? ?ANSI_QUOTES

            將‘"’視為識(shí)別符引號(hào)(‘`’引號(hào)字符),不要視為字符串的引號(hào)字符。在ANSI模式,你可以仍然使用‘`’來引用識(shí)別符。啟用ANSI_QUOTES后,你不能用雙引號(hào)來引用字符串,因?yàn)樗唤忉尀樽R(shí)別符。

            ·? ?? ?? ?ERROR_FOR_DIVISION_BY_ZERO

            在嚴(yán)格模式,在INSERT或UPDATE過程中,如果被零除(或MOD(X,0)),則產(chǎn)生錯(cuò)誤(否則為警告)。如果未給出該模式,被零除時(shí)MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作結(jié)果為NULL。

            ·? ?? ?? ?HIGH_NOT_PRECEDENCE

            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í)的結(jié)果。

            mysql> SET sql_mode = '';
            mysql> SELECT NOT 1 BETWEEN -5 AND 5;
            ? ?? ???-> 0
            mysql> SET sql_mode = 'broken_not';
            mysql> SELECT NOT 1 BETWEEN -5 AND 5;
            ? ?? ???-> 1
            ·? ?? ?? ?IGNORE_SPACE

            允許函數(shù)名和‘(’之間有空格。強(qiáng)制將所有函數(shù)名視為保存的字。結(jié)果是,如果你想要訪問保存為字的數(shù)據(jù)庫、表或列名,你必須引用它。例如,因?yàn)橛蠻SER()函數(shù),mysql數(shù)據(jù)庫中的user表名和該表內(nèi)的User列被保存下來,因此你必須引用它們:

            SELECT "User" FROM mysql."user";
            ·? ?? ?? ?NO_AUTO_CREATE_USER

            防止GRANT自動(dòng)創(chuàng)建新用戶,除非還指定了密碼。

            ·? ?? ?? ?NO_AUTO_VALUE_ON_ZERO

            NO_AUTO_VALUE_ON_ZERO影響AUTO_INCREMENT列的處理。一般情況,你可以向該列插入NULL或0生成下一個(gè)序列號(hào)。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一個(gè)序列號(hào)。

            如果將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可以解決該問題。mysqldump在輸出中自動(dòng)包括啟用NO_AUTO_VALUE_ON_ZERO的語句。

            ·? ?? ?? ?NO_BACKSLASH_ESCAPES

            禁用反斜線字符(‘\’)做為字符串內(nèi)的退出字符。啟用該模式,反斜線則成為普通字符。

            ·? ?? ?? ?NO_DIR_IN_CREATE

            創(chuàng)建表時(shí),忽視所有INDEX DIRECTORY和DATA DIRECTORY指令。該選項(xiàng)對(duì)從復(fù)制服務(wù)器有用。

            ·? ?? ?? ?NO_ENGINE_SUBSTITUTION

            如果需要的存儲(chǔ)引擎被禁用或未編譯,可以防止自動(dòng)替換存儲(chǔ)引擎。

            ·? ?? ?? ?NO_FIELD_OPTIONS

            不要在SHOW CREATE TABLE的輸出中打印MySQL專用列選項(xiàng)。該模式在可移植模式(portability mode)下用于mysqldump。

            ·? ?? ?? ?NO_KEY_OPTIONS

            不要在SHOW CREATE TABLE的輸出中打印MySQL專用索引選項(xiàng)。該模式在可移植模式(portability mode)下用于mysqldump。

            ·? ?? ?? ?NO_TABLE_OPTIONS

            不要在SHOW CREATE TABLE的輸出中打印MySQL專用表選項(xiàng)(例如ENGINE)。該模式在可移植模式(portability mode)下用于mysqldump。

            ·? ?? ?? ?NO_UNSIGNED_SUBTRACTION

            在減運(yùn)算中,如果某個(gè)操作數(shù)沒有符號(hào),不要將結(jié)果標(biāo)記為UNSIGNED。請(qǐng)注意這樣使UNSIGNED BIGINT不能100%用于上下文中。參見12.8節(jié),“Cast函數(shù)和操作符”。



            ·? ?? ?? ?NO_ZERO_DATE

            在嚴(yán)格模式,不要將 '0000-00-00'做為合法日期。你仍然可以用IGNORE選項(xiàng)插入零日期。在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告。

            ·? ?? ?? ?NO_ZERO_IN_DATE

            在嚴(yán)格模式,不接受月或日部分為0的日期。如果使用IGNORE選項(xiàng),我們?yōu)轭愃频娜掌诓迦?0000-00-00'。在非嚴(yán)格模式,可以接受該日期,但會(huì)生成警告。

            ·? ?? ?? ?ONLY_FULL_GROUP_BY

            不要讓GROUP BY部分中的查詢指向未選擇的列。

            ·? ?? ?? ?PIPES_AS_CONCAT

            將||視為字符串連接操作符(+)(同CONCAT()),而不視為OR。

            ·? ?? ?? ?REAL_AS_FLOAT

            將REAL視為FLOAT的同義詞,而不是DOUBLE的同義詞。

            ·? ?? ?? ?STRICT_TRANS_TABLES

            為所有存儲(chǔ)引擎啟用嚴(yán)格模式。非法數(shù)據(jù)值被拒絕。后面有詳細(xì)說明。

            ·? ?? ?? ?STRICT_TRANS_TABLES

            為事務(wù)存儲(chǔ)引擎啟用嚴(yán)格模式,也可能為非事務(wù)存儲(chǔ)引擎啟用嚴(yán)格模式。后面有詳細(xì)說明。

            嚴(yán)格模式控制MySQL如何處理非法或丟失的輸入值。有幾種原因可以使一個(gè)值為非法。例如,數(shù)據(jù)類型錯(cuò)誤,不適合列,或超出范圍。當(dāng)新插入的行不包含某列的沒有顯示定義DEFAULT子句的值,則該值被丟失。

            對(duì)于事務(wù)表,當(dāng)啟用STRICT_ALL_TABLES或STRICT_TRANS_TABLES模式時(shí),如果語句中有非法或丟失值,則會(huì)出現(xiàn)錯(cuò)誤。語句被放棄并滾動(dòng)。

            對(duì)于非事務(wù)表,如果插入或更新的第1行出現(xiàn)壞值,兩種模式的行為相同。語句被放棄,表保持不變。如果語句插入或修改多行,并且壞值出現(xiàn)在第2或后面的行,結(jié)果取決于啟用了哪個(gè)嚴(yán)格選項(xiàng):

            ·? ?? ?? ?對(duì)于STRICT_ALL_TABLES,MySQL返回錯(cuò)誤并忽視剩余的行。但是,在這種情況下,前面的行已經(jīng)被插入或更新。這說明你可以部分更新,這可能不是你想要的。要避免這點(diǎn),最好使用單行語句,因?yàn)檫@樣可以不更改表即可以放棄。

            ·? ?? ?? ?對(duì)于STRICT_TRANS_TABLES,MySQL將非法值轉(zhuǎn)換為最接近該列的合法值并插入調(diào)整后的值。如果值丟失,MySQL在列中插入隱式 默認(rèn)值。在任何情況下,MySQL都會(huì)生成警告而不是給出錯(cuò)誤并繼續(xù)執(zhí)行語句。13.1.5節(jié),“CREATE TABLE語法”描述了隱式默認(rèn)值。

            嚴(yán)格模式不允許非法日期,例如'2004-04-31'。它不允許禁止日期使用“零”部分,例如'2004-04-00'或“零”日期。要想禁止,應(yīng)在嚴(yán)格模式基礎(chǔ)上,啟用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL模式。

            如果你不使用嚴(yán)格模式(即不啟用STRICT_TRANS_TABLES或STRICT_ALL_TABLES模式),對(duì)于非法或丟失的值,MySQL將插入調(diào)整后的值并給出警告。在嚴(yán)格模式,你可以通過INSERT IGNORE或UPDATE IGNORE來實(shí)現(xiàn)。參見13.5.4.22節(jié),“SHOW WARNINGS語法”。

            下面的特殊模式快速組合了前面所列的模式。

            其中包括大多數(shù)最新版本MySQL中的所有模式值。舊版本中,組合模式不包括新版本中沒有的不適用的具體模式值。

            ·? ?? ?? ?ANSI

            等同REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。參見1.8.3節(jié),“在ANSI模式下運(yùn)行MySQL”。

            ·? ?? ?? ?DB2

            等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。

            ·? ?? ?? ?MAXDB

            等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER。

            ·? ?? ?? ?MSSQL

            等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS。

            ·? ?? ?? ?MYSQL323

            等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。

            ·? ?? ?? ?MYSQL40

            等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。

            ·? ?? ?? ?ORACLE

            等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。

            ·? ?? ?? ?POSTGRESQL

            等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。

            ·? ?? ?? ?TRADITIONAL

            等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER。
            久久国产成人亚洲精品影院| 国产精品久久久久久久久久影院 | 日本精品一区二区久久久| 久久久久久极精品久久久| 亚洲国产小视频精品久久久三级| 精产国品久久一二三产区区别 | 久久不射电影网| 性高朝久久久久久久久久| 久久超乳爆乳中文字幕| 久久夜色撩人精品国产| 99久久免费国产精品热| 人妻少妇精品久久| 情人伊人久久综合亚洲| 久久亚洲精品无码AV红樱桃| 亚洲国产精品无码久久九九| 欧美伊香蕉久久综合类网站| 久久人人爽人人爽人人片AV不 | 久久中文精品无码中文字幕| 精品久久久久久久无码| 久久夜色精品国产亚洲| 久久亚洲国产精品123区| 久久最近最新中文字幕大全 | 久久福利青草精品资源站免费| 精品久久人人爽天天玩人人妻| 精品久久久久久久久久久久久久久| 精品国产VA久久久久久久冰| 亚洲AV无一区二区三区久久| 2020国产成人久久精品 | 午夜人妻久久久久久久久| 免费一级欧美大片久久网 | 久久精品国产亚洲av日韩| 久久久久久久精品成人热色戒| 日本欧美国产精品第一页久久| 欧美麻豆久久久久久中文| 国产99久久九九精品无码| 午夜不卡888久久| 99久久夜色精品国产网站| 久久精品国产精品亚洲| 欧美亚洲国产精品久久| 久久久久久久97| 久久久亚洲欧洲日产国码aⅴ|