ON DUPLICATE KEY UPDATE在mysql的INSERT語句中用法
阿新 • • 發佈:2018-11-01
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後面的賦值語句進行相應欄位值的更新。