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