1. 程式人生 > >ON DUPLICATE KEY UPDATE在mysql的INSERT語句中用法

ON DUPLICATE KEY UPDATE在mysql的INSERT語句中用法

1、如果在INSERT語句後面帶上ON DUPLICATE KEY UPDATE 子句,而要插入的行與表中現有記錄的惟一索引或主鍵中產生重複值,那麼就會發生舊行的更新
2、如果插入的行資料與現有表中記錄的唯一索引或者主鍵****不重複,則執行新紀錄插入操作。

示例:

create table testtable(
	day date not null,
	slot tinyint unsigned not null,
	cnt int unsigned not null,
	primary key(day)
) engine = InnoDB;
testtable表的主鍵是由 day+slot 兩個欄位組成。

現有資料:
day slot cnt
2017-11-19 10 1
2017-11-20 20 0

1、

insert into testtable(day, slot, cnt) values ('2017-11-19', 10, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;

由於插入的資料中 day+slot 與現有的記錄的唯一索引重複了,所以執行舊行的更新,將cnt欄位的值變為cnt+1,執行之後,最終結果是這樣的:
day slot cnt
2017-11-19 10 2
2017-11-20 20 0

2、

insert into testtable(day, slot, cnt) values ('2017-11-19', 20, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;

由於插入的資料中 day+slot 與現有的記錄的唯一索引或者主鍵都沒有重複,所以執行新紀錄插入,執行之後,最終結果是這樣的:
day slot cnt
2017-11-19 10 2
2017-11-19 20 1
2017-11-20 20 0

注意:先判斷插入的值,主鍵是否重複。不重複,則INSERT;重複,則將ON DUPLICATE KEY UPDATE後面的賦值語句進行相應欄位值的更新。