mysql修改數據 -- 主鍵沖突


mysql 插入數據唯一鍵沖突
前提: 修改數據三種可用的方法解決主鍵沖突的問題
1. insert into ... on duplicate key update set ...
2. update ... set = case key when ... then ... when ... then ... else end where ...;
3. replace into ... (與1相似,但若主鍵沖突會先刪除原數據,后再插入新數據 ,所以運用時最好帶上主鍵)
例:
table : dev_wlcolor ;
field : primary key(wlcolorid) , union index(wlid , yscode , yscode);
有兩條數據:
wlcolorid :108 wlid:367 yscode:A type:2
wlcolorid :114 wlid:367 yscode:B type:2
現在需要批量修改為:
wlcolorid :108 wlid:367 yscode:B type:2
wlcolorid :114 wlid:367 yscode:A type:2

測試過程:
1. sql :insert into dev_wlcolor(`wlcolorid` ,`wlid`,`yscode` `type`) values (114 ,'367' , 'B' , 2) , (108 ,'367', 'A' 2) on duplicate key update `yscode` = values(`yscode`);
測試結果 :因為雖然是批量插入數據,但mysql 數據庫 每插入一條數據都會檢測數據是否沖突 , 當插入數據 wlcolorid 為 108 時發現數據庫中存在該唯一鍵 ,后mysql 嘗試把yscode字段的A改為B ,但發現如果更新yscode字段發現
wlcolorid 為114 這條數據也存在一個唯一鍵 wlid-yscode-type(367-B-2),所以產生唯一鍵沖突 ,修改數據失敗;
2. sql :update dev_wlcolor set yscode = case wlcolorid when 108 then 'B' when 114 then 'A' else yscode end where wlcolorid in(108 , 114);
測試結果 :同上;
3. sql : replace into dev_wlcolor(`wlcolorid` ,`wlid`,`yscode`, `type`) values (114 ,'367' , 'B' , 2) , (108 ,'367', 'A' 2);
測試結果 : 因為每次有唯一鍵沖突 , mysql 都會先把數據刪除 , 再插入一條新的數據 , 所以修改數據成功


tip: 使用 insert ignore table(...) values(...) 插入數據時可跳過主鍵(或唯一鍵)沖突的數據 而繼續插入剩下的數據;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM