標準 UPDATE 不支援批量多條件更新,逐條執行效能極差。MySQL 專有語法 INSERT ... ON DUPLICATE KEY UPDATE 可在「主鍵/唯一鍵衝突時轉為更新」,實現單語句批量 upsert。
INSERT INTO t_member (id, name, email) VALUES (1, 'nick', 'nick@126.com'), (4, 'angel', 'angel@163.com'), (7, 'brank', 'ba198@126.com') ON DUPLICATE KEY UPDATE name = VALUES(name), email = VALUES(email);
id 必須為主鍵或唯一索引,否則不會觸發 DUPLICATE KEYVALUES(col) 引用 INSERT 列表中對應列的值,避免重複寫死ON CONFLICT,SQL Server 用 MERGEON DUPLICATE KEY UPDATE cnt = cnt + VALUES(cnt)VALUES 建議 500-1000 行,超大批次拆分事務LOAD DATA INFILE + 臨時表 再 upsert,導入百萬級更快