[MySQL] 深入 MySQL INSERT ... ON DUPLICATE KEY UPDATE 語法

必要條件

  1.   資料表中必須有 PRIMARY或UNIQUE的索引
  2.   INSERT時須帶入1. 欄位的資料

使用情境

一般我們在做資料新增時會先檢查資料是否存在,都會使用下列語法

IF(SELECT * FROM table WHERE id= '1')
  UPDATE table SET a= a+ 1 WHERE id= '1';
ELSE
  INSERT INTO table (id, a) VALUES (2, 1);

可以改成

INSERT INTO table (id, a) VALUES (2, 1)
ON DUPLICATE KEY UPDATE a= a+ 1;

Mysql會自動判斷該主鍵是否重覆,如果重覆就會叫用後面的 UPDATE

多行資料處理

若是用批量新增,則可以在ON DUPLICATE KEY UPDATE 後用VALUES,以下範例:
a為UNIQUE,並且資料存在 (2,1,1) 和 (1,3,3),因為a已存在,所以會將(1,3,3)更新至(1,2,3), (2,1,1)更新至 (2,5,1) ,其餘則插入新紀錄

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)

注意:ON DUPLICATE KEY UPDATE 為MySQL特有語法,並不是SQL標準語法

參考資料:


留言

這個網誌中的熱門文章

[PHP] 正規表達式 過濾特殊符號 / 過濾非字母數字的字元 / 過濾字母數字