国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql之SQL Mode用法詳解

2024-07-24 12:47:05
字體:
來源:轉載
供稿:網友

一、Mysql SQL Mode簡介

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

通常在linux下安裝完mysql后,其默認的sql-mode值是空,在這種情形下mysql執行的是一種不嚴格的檢查,例如日期字段可以插入'0000-00-00 00:00:00'這樣的值,還有如果要插入的字段長度超過列定義的長度,那么mysql不會終止操作,而是會自動截斷后面的字符繼續插入操作,如下例:

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)

我們發現插入的字符被自動截斷了,但是如果我們本意希望如果長度超過限制就報錯,那么我們可以設置sql_mode為STRICT_TRANS_TABLES,如下:

mysql> set session sql_mode='STRICT_TRANS_TABLES'

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

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

經常使用的sql_mode值:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁甸县| 太湖县| 腾冲县| 九江县| 兴隆县| 临猗县| 抚顺县| 简阳市| 大同县| 抚州市| 丰原市| 长兴县| 和平县| 兴隆县| 喀喇沁旗| 钟山县| 新源县| 阿拉善左旗| 兴宁市| 亳州市| 民丰县| 垫江县| 荆州市| 留坝县| 伊春市| 班戈县| 钦州市| 吉林省| 全椒县| 崇明县| 庆城县| 浪卡子县| 济南市| 开化县| 墨脱县| 荆门市| 高尔夫| 蒲江县| 辽中县| 汝南县| 文山县|