INSERT INTO .. ON DUPLICATE KEY更新多行記載。本站提示廣大學習愛好者:(INSERT INTO .. ON DUPLICATE KEY更新多行記載)文章只能為提供參考,不一定能成為您想要的結果。以下是INSERT INTO .. ON DUPLICATE KEY更新多行記載正文
假如在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,而且拔出行後會招致在一個UNIQUE索引或PRIMARY KEY中湧現反復值,則履行舊行UPDATE;假如不會招致獨一值列反復的成績,則拔出新行。例如,假如列a被界說為UNIQUE,而且包括值1,則以下兩個語句具有雷同的後果:
INSERT INTO TABLE (a,b,c)
VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;
假如行作為新記載被拔出,則受影響行的值為1;假如原本的記載被更新,則受影響行的值為2。
假如你想懂得更多關於INSERT INTO .. ON DUPLICATE KEY的功效解釋,詳見MySQL參考文檔:13.2.4. INSERT語法
如今成績來了,假如INSERT多行記載, ON DUPLICATE KEY UPDATE前面字段的值怎樣指定?要曉得一條INSERT語句中只能有一個ON DUPLICATE KEY UPDATE,究竟他會更新一行記載,照樣更新一切須要更新的行。這個成績困擾了我良久了,其實應用VALUES()函數一切成績都處理了。
舉個例子,字段a被界說為UNIQUE,而且原數據庫表table中已存在記載(2,2,9)和(3,2,1),假如拔出記載的a值與原有記載反復,則更新原有記載,不然拔出新行:
INSERT INTO TABLE (a,b,c) VALUES
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)
ON DUPLICATE KEY UPDATE b=VALUES(b);
以上SQL語句的履行,發明(2,5,7)中的a與原有記載(2,2,9)產生獨一值抵觸,則履行ON DUPLICATE KEY UPDATE,將原有記載(2,2,9)更新成(2,5,9),將(3,2,1)更新成(3,3,1),拔出新記載(1,2,3)和(4,8,2)
留意:ON DUPLICATE KEY UPDATE只是MySQL的特有語法,其實不是SQL尺度語法