程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql之SQL Mode用法詳解

Mysql之SQL Mode用法詳解

編輯:MySQL綜合教程

Mysql之SQL Mode用法詳解。本站提示廣大學習愛好者:(Mysql之SQL Mode用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Mysql之SQL Mode用法詳解正文


1、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須要運用人員衡量各類得掉,從而獲得一個適合的選擇。

Sql_mode的值還有許多,這裡不再累述,可以參考相干的手冊。

2、SQL Mode與可移植性

假如mysql與其它異構數據庫之間稀有據移植的需求的話,那末上面的sql_mode的組合設置可以到達響應的後果:

數據庫 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

3、SQL Mode與數據效驗

SQL Mode 還可以完成對數據效驗和轉移等功效如:

1.效驗日期數據正當性.
2.在INSERT或UPDATE進程中,假如被零除(或MOD(X,0)),則發生毛病
3.將‘"'視為辨認符引號(‘`'引號字符)
4.禁用反斜線字符(‘\')做為字符串內的加入字符。啟用NO_BACKSLASH_ESCAPES形式,反斜線則成為通俗字符。
5.將||視為字符串聯接操作符(+)(同CONCAT()),而不視為OR。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved