mysql ON DUPLICATE KEY UPDATE 用法

  mysql 語句:INSERT ... ON DUPLICATE KEY UPDATEphp

  向數據庫插入記錄時,有時會有這種需求,當符合某種條件的數據存在時,去修改它,不存在時,則新增,也就是insertOrUpdate操做。mysql

  該語句是基於惟一索引或主鍵使用,好比一個字段a被加上了unique index,而且表中已經存在了一條記錄值爲1,下面兩個語句會有相同的效果:sql

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;

   ON DUPLICATE KEY UPDATE後面能夠放多個字段,用英文逗號分割。使用ON DUPLICATE KEY UPDATE,最終若是插入了一個新行,則受數據庫

影響的行數是1,若是修改了已存在的一行數據,則受影響的行數是2,若是值不變,則受影響行數是0。函數

  若是字段b也被加上了unique index,則該語句和下面的update語句是等效的:測試

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;  

   若是a=1 OR b=2匹配了多行,則只有一行會被修改。一般的,在ON DUPLICATE KEY UPDATE語句中,咱們應該避免多個惟一索引的狀況。spa

 

  能夠在ON DUPLICATE KEY UPDATE後面使用VALUES(字段名)函數來表示即將插入的值,若是須要插入或更新多條數據,而且更新的字段需blog

要根據其它字段來運算時,能夠使用以下語句:索引

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

   這個語句等同於下面的兩個語句:table

INSERT INTO table (a,b,c) VALUES (1,2,3)  ON DUPLICATE KEY UPDATE c=3;--1+2  
INSERT INTO table (a,b,c) VALUES (4,5,6)  ON DUPLICATE KEY UPDATE c=9;--4+5  

   若是一個表中包含了一個自增的字段,使用INSERT ... ON DUPLICATE KEY UPDATE新增或修改t數據後,能夠經過last_insert_id()方法返

回最後自動生成的值,若是是多條,實際測試是返回第一條數據自增的值。

相關文章
相關標籤/搜索