insert的語(yǔ)法
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, ... ]
如果列清單和VALUES清單均為空清單,則INSERT會(huì)創(chuàng)建一個(gè)行,每個(gè)列都被設(shè)置為默認(rèn)值:
假設(shè)worker表只有name和email,插入一條數(shù)據(jù)
批量插入多條數(shù)據(jù)
給出要賦值的那個(gè)列,然后再列出值的插入數(shù)據(jù)
使用set插入數(shù)據(jù)
在 SET 子句中未命名的行都賦予一個(gè)缺省值,使用這種形式的 INSERT 語(yǔ)句不能插入多行。
一個(gè)expression可以引用在一個(gè)值表先前設(shè)置的任何列,例如:
使用INSERT…SELECT語(yǔ)句插入從其他表選擇的行
查詢不能包含一個(gè)ORDER BY子句,而且INSERT語(yǔ)句的目的表不能出現(xiàn)在SELECT查詢部分的FROM子句.
ON DUPLICATE KEY UPDATE
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。
INSERT INTO...SELECT的ON DUPLICATE KEY UPDATE
INSERT DELAYED
如果您的客戶端不能等待INSERT完成,則這個(gè)選項(xiàng)是非常有用的,當(dāng)一個(gè)客戶端使用INSERT DELAYED時(shí),會(huì)立刻從服務(wù)器處得到一個(gè)確定。并且行被排入隊(duì)列,當(dāng)表沒(méi)有被其它線程使用時(shí),此行被插入。
使用INSERT DELAYED的另一個(gè)重要的好處是,來(lái)自許多客戶端的插入被集中在一起,并被編寫入一個(gè)塊。這比執(zhí)行許多獨(dú)立的插入要快很多。
使用DELAYED時(shí)有一些限制:
1.INSERT DELAYED僅適用于MyISAM, MEMORY和ARCHIVE表。對(duì)于MyISAM表,如果在數(shù)據(jù)文件的中間沒(méi)有空閑的塊,則支持同時(shí)采用SELECT和INSERT語(yǔ)句。在這些情況下,基本不需要對(duì)MyISAM使用INSERT DELAYED。
2.INSERT DELAYED應(yīng)該僅用于指定值清單的INSERT語(yǔ)句。服務(wù)器忽略用于INSERT DELAYED...SELECT語(yǔ)句的DELAYED和INSERT DELAYED...ON DUPLICATE UPDATE語(yǔ)句的DELAYED。
3.因?yàn)樵谛斜徊迦肭埃Z(yǔ)句立刻返回,所以您不能使用LAST_INSERT_ID()來(lái)獲取AUTO_INCREMENT值。AUTO_INCREMENT值可能由語(yǔ)句生成。
4.對(duì)于SELECT語(yǔ)句,DELAYED行不可見(jiàn),直到這些行確實(shí)被插入了為止。
5.DELAYED在從屬?gòu)?fù)制服務(wù)器中被忽略了,因?yàn)镈ELAYED不會(huì)在從屬服務(wù)器中產(chǎn)生與主服務(wù)器不一樣的數(shù)據(jù)。
新聞熱點(diǎn)
疑難解答
圖片精選