|
INSERT語法 INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE] [INTO]tbl_name[(col_name,...)] VALUES ({expr| DEFAULT},...),(...),... [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]或: INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE] [INTO]tbl_name SETcol_name={expr| DEFAULT}, ... [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]或: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO]tbl_name[(col_name,...)] SELECT ... [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]一、DELAYED的使用 使用延遲插入操作DELAYED調(diào)節(jié)符應(yīng)用于INSERT和REPLACE語句。當(dāng)DELAYED插入操作到達(dá)的時候,服務(wù)器把數(shù)據(jù)行放入一個隊(duì)列中,并立即給客戶端返回一個狀態(tài)信息,這樣客戶端就可以在數(shù)據(jù)表被真正地插入記錄之前繼續(xù)進(jìn)行操作了。如果讀取者從該數(shù)據(jù)表中讀取數(shù)據(jù),隊(duì)列中的數(shù)據(jù)就會被保持著,直到?jīng)]有讀取者為止。接著服務(wù)器開始插入延遲數(shù)據(jù)行(delayed-row)隊(duì)列中的數(shù)據(jù)行。在插入操作的同時,服務(wù)器還要檢查是否有新的讀取請求到達(dá)和等待。如果有,延遲數(shù)據(jù)行隊(duì)列就被掛起,允許讀取者繼續(xù)操作。當(dāng)沒有讀取者的時候,服務(wù)器再次開始插入延遲的數(shù)據(jù)行。這個過程一直進(jìn)行,直到隊(duì)列空了為止。幾點(diǎn)要注意事項(xiàng):· INSERT DELAYED應(yīng)該僅用于指定值清單的INSERT語句。服務(wù)器忽略用于INSERT DELAYED...SELECT語句的DELAYED。· 服務(wù)器忽略用于INSERT DELAYED...ON DUPLICATE UPDATE語句的DELAYED。· 因?yàn)樵谛斜徊迦肭?,語句立刻返回,所以您不能使用LAST_INSERT_ID()來獲取AUTO_INCREMENT值。AUTO_INCREMENT值可能由語句生成。· 對于SELECT語句,DELAYED行不可見,直到這些行確實(shí)被插入了為止。· DELAYED在從屬復(fù)制服務(wù)器中被忽略了,因?yàn)镈ELAYED不會在從屬服務(wù)器中產(chǎn)生與主服務(wù)器不一樣的數(shù)據(jù)。注意,目前在隊(duì)列中的各行只保存在存儲器中,直到它們被插入到表中為止。這意味著,如果您強(qiáng)行中止了mysqld(例如,使用kill -9)或者如果mysqld意外停止,則所有沒有被寫入磁盤的行都會丟失。二、IGNORE的使用IGNORE是MySQL相對于標(biāo)準(zhǔn)SQL的擴(kuò)展。如果在新表中有重復(fù)關(guān)鍵字,或者當(dāng)STRICT模式啟動后出現(xiàn)警告,則使用IGNORE控制ALTER TABLE的運(yùn)行。如果沒有指定IGNORE,當(dāng)重復(fù)關(guān)鍵字錯誤發(fā)生時,復(fù)制操作被放棄,返回前一步驟。如果指定了IGNORE,則對于有重復(fù)關(guān)鍵字的行,只使用第一行,其它有沖突的行被刪除。并且,對錯誤值進(jìn)行修正,使之盡量接近正確值。insert ignore into tb(...) value(...)這樣不用校驗(yàn)是否存在了,有則忽略,無則添加三、ON DUPLICATE KEY UPDATE的使用如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會導(dǎo)致在一個UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個語句具有相同的效果:mysql>INSERT INTO table (a,b,c) VALUES (1,2,3) mysql>UPDATE table SET c=c+1 WHERE a=1;
|
|
|