首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL INSERT ... ON DUPLICATE KEY UPDATE 多行資料更新機制詳解

     編輯:MySQL 資料庫相關知識

語法回顧

當 INSERT 語句尾部加上 ON DUPLICATE KEY UPDATE,若插入導致唯一索引或主鍵衝突,則執行 UPDATE;否則插入新行。

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。

多行插入時的 VALUES() 函數用法

單條 INSERT 只能有一個 ON DUPLICATE KEY UPDATE 子句,但可一次插入多行。關鍵在於使用 VALUES(欄位名) 引用「當前插入行」的值:

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);

假設表中已存在 (2,2,9) 和 (3,2,1)(a 為唯一鍵):

  • (1,2,3):a=1 無衝突 → 插入新行
  • (2,5,7):a=2 衝突 → 更新 b=VALUES(b)=5,原行變 (2,5,9)
  • (3,3,6):a=3 衝突 → 更新 b=VALUES(b)=3,原行變 (3,3,1)
  • (4,8,2):a=4 無衝突 → 插入新行

最終結果:新增 (1,2,3)、(4,8,2);更新 (2,5,9)、(3,3,1)。

注意事項

  • ON DUPLICATE KEY UPDATE 是 MySQL 專有語法,非 SQL 標準。
  • VALUES() 僅能在 ON DUPLICATE KEY UPDATE 子句中使用,不可用於其他位置。
  • 若需更新多欄位,以逗號分隔:ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved