日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
MySQL插入時(shí)唯一鍵沖突的幾種處理方式

MySQL插入記錄時(shí),結(jié)果提示主鍵沖突,怎么辦?

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的榮昌網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

當(dāng)批量插入數(shù)據(jù)時(shí),發(fā)現(xiàn)插入的這批數(shù)據(jù)中,有某些記錄存在唯一鍵沖突,這種情況特別是在多線程進(jìn)行數(shù)據(jù)插入時(shí),會(huì)造成異常導(dǎo)致處理終止或者catch異常忽略部分?jǐn)?shù)據(jù)。有什么好的辦法對(duì)這些沖突的記錄進(jìn)行處理呢?

下面提供三種處理方式

1. Ignore關(guān)鍵詞

某些場(chǎng)景下,我們需要批量插入的數(shù)據(jù),某些已經(jīng)在DB中了,我們希望在出現(xiàn)沖突時(shí),直接跳過,把能插入的都插入就好,這種情況下,使用ignore關(guān)鍵詞就比較合適了。

一個(gè)實(shí)際的case如下:

INSERT IGNORE INTO test.licenses 
(license_id,organization_id,license_type,product_name,license_max,license_allocated,comment) VALUES
('08dbe05-606e-4dad-9d33-90ef10e334f9','442adb6e-fa58-47f3-9ca2-ed1fecdfe86c','core-prod','WildCat Application Gateway',16,16,NULL),
('38777179-7094-4200-9d61-edb101c6ea88','442adb6e-fa58-47f3-9ca2-ed1fecdfe86c','user','Spring',100,6,NULL);

執(zhí)行截圖如下, 注意統(tǒng)計(jì)框中的內(nèi)容,表示忽略了一條,執(zhí)行插入成功一條

2. Replace Into方式

如果在批量插入中,我們希望用新的數(shù)據(jù)替換掉沖突的數(shù)據(jù),這個(gè)時(shí)候就可以使用replace into了。

語(yǔ)法如下:

REPLACE INTO test.licenses 
(license_id,organization_id,license_type,product_name,license_max,license_allocated,comment) VALUES
('38777179-7094-4200-9d61-edb101c6ea88','442adb6e-fa58-47f3-9ca2-ed1fecdfe86c','core-prod','Spring Core',100,8,NULL);

執(zhí)行截圖如下,注意紅框中,當(dāng)某條記錄沖突之后并替換,其影響行數(shù)為2, 其實(shí)際過程是

  • 刪除沖突數(shù)據(jù)
  • 插入新的數(shù)據(jù)

3. ON DUPLICATE KEY UPDATE

還有一種情況,我們希望在出現(xiàn)沖突時(shí),只更新某些數(shù)據(jù),這個(gè)時(shí)候可以在insert語(yǔ)句的最后加上on duplicate key update了

語(yǔ)法如下

INSERT INTO test.licenses 
(license_id,organization_id,license_type,product_name,license_max,license_allocated,comment) VALUES
('38777179-7094-4200-9d61-edb101c6ea88','442adb6e-fa58-47f3-9ca2-ed1fecdfe86c','user','Spring',100,6,NULL)
on duplicate key update license_allocated = 12;

執(zhí)行截圖如下,這個(gè)是在原記錄的基礎(chǔ)上執(zhí)行更新指定key的value, 比如上面的插入中,當(dāng)沖突時(shí),我們只更新license_allocated字段,而其它的字段沒有更新


名稱欄目:MySQL插入時(shí)唯一鍵沖突的幾種處理方式
瀏覽地址:http://www.5511xx.com/article/dpgcdig.html