mysql的ON DUPLICATE KEY UPDATE在INSERT語句中的用法
阿新 • • 發佈:2018-12-16
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, slot) ) 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 與現有的記錄的唯一索引重複了,所以執行舊行的更新,執行之後,最終結果是這樣的: 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