程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql insert的幾點操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

mysql insert的幾點操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

編輯:MySQL綜合教程

mysql insert的幾點操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )。本站提示廣大學習愛好者:(mysql insert的幾點操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE ))文章只能為提供參考,不一定能成為您想要的結果。以下是mysql insert的幾點操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )正文


INSERT語法
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
1、DELAYED 的應用
應用延遲拔出操作
DELAYED調理符運用於INSERT和REPLACE語句。當DELAYED拔出操作達到的時刻,
辦事器把數據行放入一個隊列中,並立刻給客戶端前往一個狀況信息,如許客戶
端便可以在數據表被真正地拔出記載之前持續停止操作了。假如讀取者從該數據
表中讀取數據,隊列中的數據就會被堅持著,直到沒有讀取者為止。接著辦事器
開端拔出延遲數據行(delayed-row)隊列中的數據行。在拔出操作的同時,辦事器
還要檢討能否有新的讀取要求達到和期待。假如有,延遲數據行隊列就被掛起,
許可讀取者持續操作。當沒有讀取者的時刻,辦事器再次開端拔出延遲的數據行。
這個進程一向停止,直到隊列空了為止。
幾點要留意事項:
· INSERT DELAYED應當僅用於指定值清單的INSERT語句。辦事器疏忽用於INSERT DELAYED...SELECT語句的DELAYED。
· 辦事器疏忽用於INSERT DELAYED...ON DUPLICATE UPDATE語句的DELAYED。
· 由於外行被拔出前,語句連忙前往,所以您不克不及應用LAST_INSERT_ID()來獲得AUTO_INCREMENT值。AUTO_INCREMENT值能夠由語句生成。
· 關於SELECT語句,DELAYED行弗成見,直到這些行確切被拔出了為止。
· DELAYED在附屬復禮服務器中被疏忽了,由於DELAYED不會在附屬辦事器中發生與主辦事器紛歧樣的數據。
留意,今朝在隊列中的各行只保留在存儲器中,直到它們被拔出到表中為止。這意味著,假如您強行中斷了mysqld(例如,應用kill -9)
或許假如mysqld不測停滯,則一切沒有被寫入磁盤的行都邑喪失。
2、IGNORE的應用
IGNORE是MySQL絕對於尺度SQL的擴大。假如在新表中有反復症結字,
或許當STRICT形式啟動後湧現正告,則應用IGNORE掌握ALTER TABLE的運轉。
假如沒有指定IGNORE,當反復症結字毛病產生時,復制操作被廢棄,前往前一步調。
假如指定了IGNORE,則關於有反復症結字的行,只應用第一行,其它有抵觸的行被刪除。
而且,對毛病值停止修改,使之盡可能接近准確值。
insert ignore into tb(...) value(...)
如許不消校驗能否存在了,有則疏忽,無則添加
3、ON DUPLICATE KEY UPDATE的應用
假如您指定了ON DUPLICATE KEY UPDATE,而且拔出行後會招致在一個UNIQUE索引或PRIMARY KEY中湧現反復值,則履行舊行UPDATE。例如,假如列a被界說為UNIQUE,而且包括值1,則以下兩個語句具有雷同的後果:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;

mysql> UPDATE table SET c=c+1 WHERE a=1;
假如行作為新記載被拔出,則受影響行的值為1;假如原本的記載被更新,則受影響行的值為2。

正文:假如列b也是獨一列,則INSERT與此UPDATE語句相當:

mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
假如a=1 OR b=2與多個行向婚配,則只要一個行被更新。平日,您應當盡可能防止對帶有多個獨一症結字的表應用ON DUPLICATE KEY子句。

您可以在UPDATE子句中應用VALUES(col_name)函數從INSERT...UPDATE語句的INSERT部門援用列值。換句話說,假如沒有產生反復症結字抵觸,則UPDATE子句中的VALUES(col_name)可以援用被拔出的col_name的值。本函數特殊實用於多行拔出。VALUES()函數只在INSERT...UPDATE語句中成心義,其它時刻會前往NULL。

示例:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
本語句與以下兩個語句感化雷同:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;
當您應用ON DUPLICATE KEY UPDATE時,DELAYED選項被疏忽。


總結:DELAYED 做為疾速拔出,其實不是很關懷掉效性,進步拔出機能。
ignore 只存眷主鍵對應記載是不存在,無則添加,有則疏忽。
ON DUPLICATE KEY UPDATE 在添加時操作,存眷非主鍵列,留意與ignore的差別。有則更新指定列,無則添加。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved