Mysql Insert Or Update語法例子


有的時候會需要寫一段insert的sql,如果主鍵存在,則update;如果主鍵不存在,則insert。Mysql中提供了這樣的用法:ON DUPLICATE KEY UPDATE。下面就看看它是如何使用的吧!

首先數據庫的原始數據如下:

a	b	c
1	b1	c1
2	b2	c2
3	b3	c3

此時如果執行下面的sql就會報錯

INSERT INTO test VALUES(1,'b4','c4');

報錯信息如下,提示無法重復插入:

1 queries executed, 0 success, 1 errors, 0 warnings

查詢:insert into test values(1,'b4','c4')

錯誤代碼: 1062
Duplicate entry '1' for key 'PRIMARY'

執行耗時   : 0 sec
傳送時間   : 0 sec
總耗時      : 0.008 sec

這時,就可以使用ON DUPLICATE KEY UPDATE,它的意思是先執行前面的Insert,如果主鍵重復,則執行后面的UPDATE

INSERT INTO test VALUES (1,'b4','c4') ON DUPLICATE KEY UPDATE b=VALUES(b),c=VALUES(c);

可以把上面的SQL簡單的理解為:

select count(1) from test where a=1;

if count(1) > 0

UPDATE test SET b='xxx',c='xxx' WHERE a=1;

執行完,可以看到有兩行收到影響(至於為什么兩行收到影響,就得研究底層的實現了,可以參考官方文檔):

1 queries executed, 1 success, 0 errors, 0 warnings

查詢:INSERT INTO test VALUES (1,'b4','c4') ON DUPLICATE KEY UPDATE b=VALUES(b),c=VALUES(c)

共 2 行受到影響

執行耗時   : 0.023 sec
傳送時間   : 0 sec
總耗時      : 0.023 sec

執行完,數據就變成下面的樣子了:

a	b	c
1	b4	c4
2	b2	c2
3	b3	c3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM