最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql之SQL Mode用法詳解

 更新時(shí)間:2014年07月05日 17:22:22   投稿:shichen2014  
這篇文章主要介紹了Mysql之SQL Mode用法,可以幫助用戶更好的理解MySQL的工作模式,需要的朋友可以參考下

一、Mysql SQL Mode簡(jiǎn)介

通常來(lái)說(shuō)MySQL服務(wù)器能夠工作在不同的SQL模式下,并能針對(duì)不同的客戶端以不同的方式應(yīng)用這些模式。這樣,應(yīng)用程序就能對(duì)服務(wù)器操作進(jìn)行量身定制以滿足自己的需求。這類模式定義了MySQL應(yīng)支持的SQL語(yǔ)法,以及應(yīng)該在數(shù)據(jù)上執(zhí)行何種確認(rèn)檢查。這樣,就能在眾多不同的環(huán)境下、與其他數(shù)據(jù)庫(kù)服務(wù)器一起更容易地使用MySQL??梢允褂谩?-sql-mode="modes"”選項(xiàng),通過(guò)啟動(dòng)mysqld來(lái)設(shè)置默認(rèn)的SQL模式。而從MySQL 4.1開(kāi)始,也能在啟動(dòng)之后,使用SET [SESSION|GLOBAL] sql_mode='modes'語(yǔ)句,通過(guò)設(shè)置sql_mode變量更改其模式。

通常在linux下安裝完mysql后,其默認(rèn)的sql-mode值是空,在這種情形下mysql執(zhí)行的是一種不嚴(yán)格的檢查,例如日期字段可以插入'0000-00-00 00:00:00'這樣的值,還有如果要插入的字段長(zhǎng)度超過(guò)列定義的長(zhǎng)度,那么mysql不會(huì)終止操作,而是會(huì)自動(dòng)截?cái)嗪竺娴淖址^續(xù)插入操作,如下例:

mysql> create table t5 (c1 char(3));
mysql> insert into t5 values('abcd');
mysql> select * from t5;
+------+
| c1 |
+------+
| abc |
+------+
1 row in set (0.00 sec)

我們發(fā)現(xiàn)插入的字符被自動(dòng)截?cái)嗔耍侨绻覀儽疽庀M绻L(zhǎng)度超過(guò)限制就報(bào)錯(cuò),那么我們可以設(shè)置sql_mode為STRICT_TRANS_TABLES,如下:

mysql> set session sql_mode='STRICT_TRANS_TABLES'

這樣我們?cè)賵?zhí)行同樣的操作,mysql就會(huì)告訴我們插入的值太長(zhǎng),操作被終止,如下:

mysql> insert into t5 values('abcd');
ERROR 1406 (22001): Data too long for column 'c1' at row 1

經(jīng)常使用的sql_mode值:

Sql_mode值 描述
ANSI 更改語(yǔ)法和行為,使其更符合標(biāo)準(zhǔn)SQL。
STRICT_TRANS_TABLES 如果不能將給定的值插入到事務(wù)表中,則放棄該語(yǔ)句。對(duì)于非事務(wù)表,如果值出現(xiàn)在單行語(yǔ)句或多行語(yǔ)句的第1行,則放棄該語(yǔ)句。本節(jié)后面給出了更詳細(xì)的描述。
TRADITIONAL 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ù)更改不會(huì)“滾動(dòng)”,結(jié)果是更新“只進(jìn)行了一部分”。

說(shuō)明:如果把sql_mode的值設(shè)置成后面的兩個(gè)值(也就是我們說(shuō)的嚴(yán)格模式),那么當(dāng)在列中插入或更新不正確的值時(shí),mysql將會(huì)給出錯(cuò)誤,并且放棄insert/update操作。在我們的一般應(yīng)用中建議使用這兩種模式,而不是使用默認(rèn)的空或ANSI模式。但是需要注意的問(wèn)題是,如果數(shù)據(jù)庫(kù)運(yùn)行在嚴(yán)格模式下,并且你的存儲(chǔ)引擎不支持事務(wù),那么有數(shù)據(jù)不一致的風(fēng)險(xiǎn)存在,比如一組sql中有兩個(gè)dml語(yǔ)句,如果后面的一個(gè)出現(xiàn)了問(wèn)題,但是前面的已經(jīng)操作成功,那么mysql并不能回滾前面的操作。因此說(shuō)設(shè)置sql_mode需要應(yīng)用人員權(quán)衡各種得失,從而得到一個(gè)合適的選擇。

Sql_mode的值還有很多,這里不再累述,可以參考相關(guān)的手冊(cè)。

二、SQL Mode與可移植性

如果mysql與其它異構(gòu)數(shù)據(jù)庫(kù)之間有數(shù)據(jù)移植的需求的話,那么下面的sql_mode的組合設(shè)置可以達(dá)到相應(yīng)的效果:

數(shù)據(jù)庫(kù) Sql_mode值
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
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

三、SQL Mode與數(shù)據(jù)效驗(yàn)

SQL Mode 還可以實(shí)現(xiàn)對(duì)數(shù)據(jù)效驗(yàn)和轉(zhuǎn)移等功能如:

1.效驗(yàn)日期數(shù)據(jù)合法性.
2.在INSERT或UPDATE過(guò)程中,如果被零除(或MOD(X,0)),則產(chǎn)生錯(cuò)誤
3.將‘"'視為識(shí)別符引號(hào)(‘`'引號(hào)字符)
4.禁用反斜線字符(‘\')做為字符串內(nèi)的退出字符。啟用NO_BACKSLASH_ESCAPES模式,反斜線則成為普通字符。

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

相關(guān)文章

  • 淺談mysql中int(1)和int(10)的區(qū)別

    淺談mysql中int(1)和int(10)的區(qū)別

    本文主要介紹了淺談mysql中int(1)和int(10)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一文總結(jié)MySQL中數(shù)學(xué)函數(shù)有哪些

    一文總結(jié)MySQL中數(shù)學(xué)函數(shù)有哪些

    MySQL函數(shù)包括數(shù)學(xué)函數(shù)、字符串函數(shù)、日期和時(shí)間函數(shù)、條件判斷函數(shù)、系統(tǒng)信息函數(shù)、加密函數(shù)等,下面這篇文章主要給大家介紹了關(guān)于MySQL中數(shù)學(xué)函數(shù)有哪些的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • MySQL給新建用戶并賦予權(quán)限最簡(jiǎn)單的方法

    MySQL給新建用戶并賦予權(quán)限最簡(jiǎn)單的方法

    在本篇文章里小編給大家整理的是一篇關(guān)于MySQL給新建用戶并賦予權(quán)限最簡(jiǎn)單的方法,需要的朋友們參考下。
    2019-11-11
  • MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃

    MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃

    explain命令是查看查詢優(yōu)化器如何決定執(zhí)行查詢的主要方法。這篇文章重點(diǎn)給大家介紹MySql中如何使用 explain 查詢 SQL 的執(zhí)行計(jì)劃,感興趣的朋友一起看看吧
    2018-05-05
  • mysql中異常錯(cuò)誤ERROR:2002的解決方法

    mysql中異常錯(cuò)誤ERROR:2002的解決方法

    最近在啟動(dòng)mysql的時(shí)候發(fā)現(xiàn)mysql報(bào)錯(cuò)了,錯(cuò)誤代碼是2002,通過(guò)查找相關(guān)的資料發(fā)現(xiàn)是var/lib/mysql 的訪問(wèn)權(quán)限問(wèn)題,所以這篇文章主要介紹了mysql中異常錯(cuò)誤ERROR:2002的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-03-03
  • MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼

    MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)備份恢復(fù)實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MySQL關(guān)聯(lián)查詢Join的實(shí)現(xiàn)原理和優(yōu)化建議

    MySQL關(guān)聯(lián)查詢Join的實(shí)現(xiàn)原理和優(yōu)化建議

    在平時(shí)的開(kāi)發(fā)過(guò)程中,大家應(yīng)該經(jīng)常會(huì)用到j(luò)oin進(jìn)行多個(gè)表的之間的關(guān)聯(lián)查詢,但是如果使用不合理的話,會(huì)導(dǎo)致查詢性能下降,本文就MySQL中的關(guān)聯(lián)查詢的實(shí)現(xiàn)原理以及一些優(yōu)化建議等內(nèi)容做一個(gè)講解,需要的朋友可以參考下
    2023-07-07
  • MySQL?SQL預(yù)處理(Prepared)的語(yǔ)法實(shí)例與注意事項(xiàng)

    MySQL?SQL預(yù)處理(Prepared)的語(yǔ)法實(shí)例與注意事項(xiàng)

    所謂預(yù)編譯語(yǔ)句就是將此類SQL語(yǔ)句中的值用占位符替代,可以視為將 SQL語(yǔ)句模板化或者說(shuō)參數(shù)化,一般稱這類語(yǔ)句叫Prepared Statements,下面這篇文章主要給大家介紹了關(guān)于MySQL?SQL預(yù)處理(Prepared)的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 修改mysql密碼與忘記mysql密碼的處理方法

    修改mysql密碼與忘記mysql密碼的處理方法

    修改mysql密碼與忘記mysql密碼的處理方法,有需要的朋友可以參考下
    2013-02-02
  • Mysql中replace與replace into的用法講解

    Mysql中replace與replace into的用法講解

    今天小編就為大家分享一篇關(guān)于Mysql中replace與replace into的用法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03

最新評(píng)論

武川县| 迁西县| 鹤岗市| 新巴尔虎左旗| 浦东新区| 沧州市| 海口市| 达拉特旗| 邓州市| 比如县| 三河市| 泰州市| 连云港市| 读书| 汾西县| 福安市| 蕉岭县| 河北区| 图片| 固原市| 都兰县| 雅安市| 台前县| 嘉兴市| 高碑店市| 五原县| 通道| 东至县| 博客| 赣榆县| 疏附县| 荆州市| 铅山县| 奉贤区| 会昌县| 临泽县| 滨州市| 安岳县| 瑞安市| 临沭县| 宜春市|