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

Mysql之SQL Mode用法詳解

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

一、Mysql SQL Mode簡介

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

通常在linux下安裝完mysql后,其默認的sql-mode值是空,在這種情形下mysql執(zhí)行的是一種不嚴格的檢查,例如日期字段可以插入'0000-00-00 00:00:00'這樣的值,還有如果要插入的字段長度超過列定義的長度,那么mysql不會終止操作,而是會自動截斷后面的字符繼續(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)插入的字符被自動截斷了,但是如果我們本意希望如果長度超過限制就報錯,那么我們可以設置sql_mode為STRICT_TRANS_TABLES,如下:

mysql> set session sql_mode='STRICT_TRANS_TABLES'

這樣我們再執(zhí)行同樣的操作,mysql就會告訴我們插入的值太長,操作被終止,如下:

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 更改語法和行為,使其更符合標準SQL。
STRICT_TRANS_TABLES 如果不能將給定的值插入到事務表中,則放棄該語句。對于非事務表,如果值出現(xiàn)在單行語句或多行語句的第1行,則放棄該語句。本節(jié)后面給出了更詳細的描述。
TRADITIONAL Make MySQL的行為象“傳統(tǒng)”SQL數(shù)據(jù)庫系統(tǒng)。該模式的簡單描述是當在列中插入不正確的值時“給出錯誤而不是警告”。注釋:一旦發(fā)現(xiàn)錯誤立即放棄INSERT/UPDATE。如果你使用非事務存儲引擎,這種方式不是你想要的,因為出現(xiàn)錯誤前進行的數(shù)據(jù)更改不會“滾動”,結果是更新“只進行了一部分”。

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

Sql_mode的值還有很多,這里不再累述,可以參考相關的手冊。

二、SQL Mode與可移植性

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

數(shù)據(jù)庫 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ù)效驗

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

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

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

相關文章

  • MySQL學習之SQL語法及SQL解析順序

    MySQL學習之SQL語法及SQL解析順序

    這篇文章主要介紹了SQL語法及SQL解析順序,SQL(Structured Query Language)是一種標準,作為一種訪問關系型數(shù)據(jù)庫的標準語言,感興趣的小伙伴可以借鑒閱讀
    2023-03-03
  • MySQL8設置自動創(chuàng)建時間和自動更新時間的實現(xiàn)方法

    MySQL8設置自動創(chuàng)建時間和自動更新時間的實現(xiàn)方法

    在實際應用中,我們時常會需要用到創(chuàng)建時間和更新時間這兩個字段,下面這篇文章主要給大家介紹了關于MySQL8設置自動創(chuàng)建時間和自動更新時間的實現(xiàn)方法,需要的朋友可以參考下
    2023-03-03
  • 一看就懂的MySQL的聚簇索引及聚簇索引是如何長高的

    一看就懂的MySQL的聚簇索引及聚簇索引是如何長高的

    聚簇索引不是一種單獨的索引類型,而是一種數(shù)據(jù)存儲方式。innodb的聚簇索引實際上在同一個結構中保存了B-tree索引和數(shù)據(jù)行。通過本文學習MySQL的聚簇索引及聚簇索引是如何長高的,感興趣的朋友一起學習下吧
    2021-05-05
  • ?SQL 中 CASE 表達式的使用方式

    ?SQL 中 CASE 表達式的使用方式

    這篇文章主要介紹了?SQL 中 CASE 表達式的使用方式,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 對于mysql的query_cache認識的誤區(qū)

    對于mysql的query_cache認識的誤區(qū)

    一直以來,對于mysql的query_cache,在網(wǎng)上就流行著這樣的說法,對于mysql的query_cache鍵值就是mysql的query,所以,如果在query中有任何的不同,包括多了個空格,都會導致mysql認為是不同的查詢
    2012-03-03
  • SQL查詢至少連續(xù)n天登錄的用戶

    SQL查詢至少連續(xù)n天登錄的用戶

    這篇文章介紹了SQL查詢至少連續(xù)n天登錄用戶的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • MySQL索引之聚集索引介紹

    MySQL索引之聚集索引介紹

    在MySQL中,InnoDB引擎表是(聚集)索引組織表(clustered index organize table),而MyISAM引擎表則是堆組織表(heap organize table)
    2015-12-12
  • 詳解Navicat遠程連接mysql很慢

    詳解Navicat遠程連接mysql很慢

    這篇文章主要介紹了詳解Navicat遠程連接mysql很慢(以及數(shù)據(jù)庫連接報錯"Too many connections")解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 淺析mysql union和union all

    淺析mysql union和union all

    union 是對數(shù)據(jù)進行并集操作,不包括重復行,同時進行默認排序而Union all 是對數(shù)據(jù)進行并集操作,包括重復行,不進行排序,下面給大家詳細介紹mysql union和union all,感興趣的朋友一起看看吧
    2017-10-10
  • Windows系統(tǒng)下MySQL無法啟動的萬能解決方法

    Windows系統(tǒng)下MySQL無法啟動的萬能解決方法

    這篇文章主要給大家介紹了關于Windows系統(tǒng)下MySQL無法啟動的萬能解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論