真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么使用MySQLStrictSQLMODE

這篇文章主要介紹“怎么使用MySQL Strict SQL MODE”,在日常操作中,相信很多人在怎么使用MySQL Strict SQL MODE問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么使用MySQL Strict SQL MODE”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的利州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

嚴(yán)格SQL模式控制MySQL如何處理數(shù)據(jù)改變語句(insert或update)中的無效或缺失值。一個(gè)值可能由于各種原因而無效。例如,它對(duì)于列來說有錯(cuò)誤的數(shù)據(jù)類型,或者超過了列的范圍。當(dāng)新記錄被插入而對(duì)于非NULL且沒有顯式在定義時(shí)指定DEFAULT子句的列沒有包含值就會(huì)出現(xiàn)缺失值的情況。(對(duì)于一個(gè)NULL列,如果缺失值就會(huì)插入NULL值)嚴(yán)格SQL模式也會(huì)影響DDL語句比如create table。

如果嚴(yán)格SQL模式?jīng)]有生效,MySQL對(duì)于無效或者缺失值會(huì)插入調(diào)整值并生成一個(gè)警告。在嚴(yán)格SQL模式中,可以通過使用insert ignore或udpate ignore來產(chǎn)生這種行為。

對(duì)于select這樣不改變數(shù)據(jù)的語句,在嚴(yán)格SQL模式中無效值會(huì)生成一個(gè)警告而不是錯(cuò)誤。

嚴(yán)格SQL模式對(duì)于試圖創(chuàng)建一個(gè)鍵值而超過列的最大鍵值長(zhǎng)度時(shí)會(huì)產(chǎn)生一個(gè)錯(cuò)誤。當(dāng)嚴(yán)格SQL模式?jīng)]有啟用時(shí),會(huì)產(chǎn)生一個(gè)警告并且截?cái)噫I值的長(zhǎng)度使其滿足最大鍵值長(zhǎng)度。

嚴(yán)格SQL模式不影響是否對(duì)外鍵約束執(zhí)行檢查。foreign_key_checks可以被使用。

如果STRICT_ALL_TABLES或STRICT_TRANS_TABLES被啟用嚴(yán)格SQL模式就會(huì)生效,但這些模式的影響會(huì)有不同:
.對(duì)于事務(wù)表來說,當(dāng)STRICT_ALL_TABLES或STRICT_TRANS_TABLES被啟用后當(dāng)在數(shù)據(jù)出現(xiàn)無效或丟失值就會(huì)出現(xiàn)錯(cuò)誤。語句就會(huì)被終止與回滾。

.對(duì)于非事務(wù)表,如果在插入或更新語句中第一行記錄出現(xiàn)壞值這些模式的行為是一樣的:語句被終止并且表仍然保持不變。如果語句插入或修改多行記錄并且在第二行或之后的行記錄中出現(xiàn)壞值,那么結(jié)果依賴于嚴(yán)格SQL模式是否被啟用。
-對(duì)于STRICT_ALL_TABLES,MySQL會(huì)返回一個(gè)錯(cuò)誤并忽略剩余的行記錄。然而,因?yàn)樵缧┑男杏涗浺呀?jīng)被插入或被更新,會(huì)導(dǎo)致部分更新。為了避免這個(gè)問題,使用單行語句,就會(huì)終止而不會(huì)改變表數(shù)據(jù)。

-對(duì)于STRICT_TRANS_TABLES,MySQL會(huì)將一個(gè)無效的值轉(zhuǎn)換成一個(gè)最接近的有效值并插入這個(gè)調(diào)整值。如果這個(gè)值將丟失,MySQL插入這個(gè)隱式缺省值。在這種情況下,MySQL生成一個(gè)敬告而不是一個(gè)錯(cuò)誤并繼續(xù)處理語句。

嚴(yán)格SQL模式對(duì)除零,零日期和日期中出現(xiàn)零的處理如下:
.嚴(yán)格SQL模式影響對(duì)除零的處理,它包括MOD(N,0):對(duì)于數(shù)據(jù)改變操作(insert,update):
-如果嚴(yán)格SQL模式?jīng)]有被啟用,除零會(huì)插入NULL并生成一個(gè)警告。
-如果嚴(yán)格SQL模式被啟用,除非指定了ignore否則除零操作會(huì)生成一個(gè)錯(cuò)誤。對(duì)于insert ignore和update ignore操作,除零操作會(huì)插入NULL并生成一個(gè)警告。

對(duì)于select,除零操作會(huì)返回NULL。啟用嚴(yán)格SQL模式會(huì)導(dǎo)致一個(gè)警告。
.嚴(yán)格SQL模式會(huì)影響服務(wù)器是否允許'0000-00-00'為一個(gè)有效日期:
-如果嚴(yán)格SQL模式?jīng)]有被啟用,'0000-00-00'被允許并且插入操作不會(huì)產(chǎn)生警告。
-如果嚴(yán)格SQL模式被啟用,'0000-00-00'不被允許并且插入操作會(huì)產(chǎn)生錯(cuò)誤,除非你指定ignore。對(duì)于insert ignore或update ignore,'0000-00-00'被允許并且插入操作會(huì)產(chǎn)生警告。

.嚴(yán)格SQL模式影響服務(wù)器是否允許在日期中的年部分為非零但月和日部分允許為零(比如'2010-00-01'或'2010-01-00'):
-如果嚴(yán)格SQL模式?jīng)]有被啟用,有零的日期被允許并且插入操作不產(chǎn)生警告。
-如果嚴(yán)格SQL模式被啟用,有零的日期不被允許并且插入操作產(chǎn)生錯(cuò)誤,除非指定ignore。對(duì)于insert ignore或update ignore來說,有零的日期將以'0000-00-00'形式被插入并產(chǎn)生一個(gè)警告。

IGNORE關(guān)鍵字與嚴(yán)格SQL模式的對(duì)比
這里將介紹在語句執(zhí)行時(shí)IGNORE關(guān)鍵字(它降級(jí)錯(cuò)誤為警告)和嚴(yán)格SQL模式(它升級(jí)警告為錯(cuò)誤)的對(duì)比。描述它們影響那些語句以及應(yīng)用它們有那些錯(cuò)誤。

IGNORE對(duì)語句執(zhí)行的影響
MySQL中的一些語句支持可選的IGNORE關(guān)鍵字。此關(guān)鍵字將導(dǎo)致服務(wù)器降級(jí)某些類型的錯(cuò)誤并生成警告。對(duì)于多行語句,IGNORE會(huì)導(dǎo)致語句跳到下一行,而不是中止。

例如,如果表t2有一個(gè)主鍵列i,試圖在多行記錄中插入相同的i值正常來說會(huì)產(chǎn)生一個(gè)重復(fù)鍵錯(cuò)誤:

mysql> insert into t2(i) values(1),(1);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

當(dāng)使用IGNORE關(guān)鍵字時(shí),包含重復(fù)鍵值的記錄仍然不會(huì)被插入,但會(huì)使用警告來代替錯(cuò)誤:

mysql> insert ignore into t2(i) values(1),(1);
Query OK, 1 row affected, 1 warning (0.15 sec)
Records: 2  Duplicates: 1  Warnings: 1
mysql> show warnings;
+---------+------+---------------------------------------+
| Level   | Code | Message                               |
+---------+------+---------------------------------------+
| Warning | 1062 | Duplicate entry '1' for key 'PRIMARY' |
| Warning | 1062 | Duplicate entry '1' for key 'PRIMARY' |
+---------+------+---------------------------------------+
2 rows in set (0.00 sec)

以下語句支持IGNORE關(guān)鍵字:
.create table... select:ignore不能應(yīng)用到語句的create table或select部分但對(duì)于由select語句所提供記錄來執(zhí)行插入語句可以應(yīng)用。對(duì)于唯一鍵值重復(fù)的記錄會(huì)被丟棄。

.delete:ignore會(huì)導(dǎo)致MySQL在處理刪除記錄時(shí)忽略錯(cuò)誤。

.insert:使用ignore,對(duì)于唯一鍵值重復(fù)的記錄會(huì)被丟棄。對(duì)于重復(fù)鍵值的行記錄會(huì)導(dǎo)致數(shù)據(jù)轉(zhuǎn)換為最接近的有效值被插入。

對(duì)于分區(qū)表當(dāng)沒有匹配指定值的分區(qū)被找到時(shí),ignore會(huì)導(dǎo)致包含那些不匹配值的記錄的插入操作失敗。
.load data,load xml:使用ignore,對(duì)于唯一鍵值重復(fù)的記錄會(huì)被丟棄。

.update:使用ignore,對(duì)于在唯一鍵值出現(xiàn)重復(fù)鍵值沖突的記錄不會(huì)被更新。被更新的記錄可能導(dǎo)致數(shù)據(jù)轉(zhuǎn)換為最接近的有效值被插入。

ignore關(guān)鍵字應(yīng)用到以下錯(cuò)誤:
ER_BAD_NULL_ERROR
ER_DUP_ENTRY
ER_DUP_ENTRY_WITH_KEY_NAME
ER_DUP_KEY
ER_NO_PARTITION_FOR_GIVEN_VALUE
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
ER_NO_REFERENCED_ROW_2
ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET
ER_ROW_IS_REFERENCED_2
ER_SUBQUERY_NO_1_ROW
ER_VIEW_CHECK_FAILED

嚴(yán)格SQL模式對(duì)語句執(zhí)行的影響
MySQL服務(wù)器可以以不同的SQL模式進(jìn)行操作并且可以應(yīng)用這些不同模式到不同的客房端,這依賴于sql_mode系統(tǒng)變量。在嚴(yán)格SQL模式中,服務(wù)器會(huì)將特定的警告升級(jí)成錯(cuò)誤。

例如,在非嚴(yán)格SQL模式中,向整數(shù)類型列插入字符串'abc'的結(jié)果是將這個(gè)字符串值轉(zhuǎn)換為0并生成一個(gè)警告:

mysql> SET sql_mode = '';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> insert into t2(i) values('abc');
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> show warnings;
+---------+------+--------------------------------------------------------+
| Level   | Code | Message                                                |
+---------+------+--------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'abc' for column 'i' at row 1 |
+---------+------+--------------------------------------------------------+
1 row in set (0.00 sec)

在嚴(yán)格SQL模式下,無效值會(huì)被拒絕并生成錯(cuò)誤:

mysql> SET sql_mode = 'STRICT_ALL_TABLES';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> insert into t2(i) values('abc');
ERROR 1366 (HY000): Incorrect integer value: 'abc' for column 'i' at row 1

在某些條件下,某些值可能超出范圍或?qū)o效行插入或從表中刪除,嚴(yán)格SQL模式適用于以下語句:
alter table
create table
create table ... select
delete(單表和多表)
insert
load data
load xml
select sleep()
update(單表和多表)
在存儲(chǔ)程序中,如果程序是在嚴(yán)格模式生效時(shí)定義的,則剛才列出的類型的各個(gè)語句將以嚴(yán)格SQL模式執(zhí)行。

嚴(yán)格SQL模式應(yīng)用于以下錯(cuò)誤,代表輸入值可能無效或丟失這類錯(cuò)誤。如果對(duì)于列值使用了錯(cuò)誤數(shù)據(jù)類型或超過了值的
范圍那么值就是無效的。如果被插入的新行不包含NOT NULL列值但除了在列定義時(shí)顯式指定了DEFAULT子句的那么就
是值丟失。
ER_BAD_NULL_ERROR
ER_CUT_VALUE_GROUP_CONCAT
ER_DATA_TOO_LONG
ER_DATETIME_FUNCTION_OVERFLOW
ER_DIVISION_BY_ZERO
ER_INVALID_ARGUMENT_FOR_LOGARITHM
ER_NO_DEFAULT_FOR_FIELD
ER_NO_DEFAULT_FOR_VIEW_FIELD
ER_TOO_LONG_KEY
ER_TRUNCATED_WRONG_VALUE
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
ER_WARN_DATA_OUT_OF_RANGE
ER_WARN_NULL_TO_NOTNULL
ER_WARN_TOO_FEW_RECORDS
ER_WRONG_ARGUMENTS
ER_WRONG_VALUE_FOR_TYPE
WARN_DATA_TRUNCATED

到此,關(guān)于“怎么使用MySQL Strict SQL MODE”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!


文章標(biāo)題:怎么使用MySQLStrictSQLMODE
新聞來源:http://weahome.cn/article/picjpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部