問題場景
在排除一個(gè)生產(chǎn)BUG的時(shí)候發(fā)現(xiàn),有個(gè)關(guān)于庫存調(diào)撥的業(yè)務(wù)出現(xiàn)了唯一鍵沖突,最終定位到是設(shè)計(jì)表的時(shí)候,DDL設(shè)置了一個(gè)組合唯一索引。在重復(fù)插入一條業(yè)務(wù)數(shù)據(jù)的時(shí)候,觸發(fā)了這個(gè)數(shù)據(jù)庫的DUPLICATE KEY.
解決的辦法很簡單,做到"無則插入,有則更新"即可。
ON DUPLICATE KEY UPDATE
MySQL提供了ON DUPLICATE KEY UPDATE來解決這個(gè)問題.
insert into
stock_prededuct_record(num,stockNumId,bizOrderId,bizOrderDetailId,bizType,bizNo,state,remark,stockOperateLogId,createTime)
values
(5,1,0,36277777,3,'XXX',1,'測試數(shù)據(jù)',0,now())
ON DUPLICATE KEY UPDATE num = num + VALUES(num);
沒有這條數(shù)據(jù)的時(shí)候插入,有則累計(jì).
VALUES表示的是insert的時(shí)候num的值.
如果文章幫到了你解決問題,給作者點(diǎn)個(gè)贊吧~