mysql - INSERT ON DUPLICATE KEY 是如何判斷重復(fù)key的?
問(wèn)題描述
使用INSERT的時(shí)候 有表T(id,A,B,C,D)
插入的時(shí)候希望通過(guò)A,B索引唯一記錄 ,有重復(fù)的時(shí)候更新C,D
INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ON DUPLICATE KEY UPDATE C=C+1,D=d 居然是可用的
INSERT 和UPDATE都是正常的
只是不知道有沒(méi)有其他問(wèn)題
所以 MySQL到底是如何判斷DUPLICATE KEY的?
問(wèn)題解答
回答1:這條語(yǔ)句相當(dāng)于:
INSERT INTO ... VALUES ...
當(dāng)INSERT(因?yàn)橹麈I或唯一鍵沖突)失敗時(shí),執(zhí)行
UPDATE ... SET ... WHERE A = a AND B = b
只是這個(gè)過(guò)程用一個(gè)原子語(yǔ)句來(lái)實(shí)現(xiàn)罷了,具體可參閱MySQL的官方文檔: https://dev.mysql.com/doc/ref...
如果表中有多個(gè)唯一鍵,情況就更復(fù)雜了,有興趣可以深入研究。還有一個(gè)類似的語(yǔ)句叫 REPLACE 跟INSERT ... ON DUPLICATE KEY UPDATE作用類似,但原理是不一樣的,有興趣可參閱: https://dev.mysql.com/doc/ref...
相關(guān)文章:
1. css3 - progress漸變效果css2. java - JPA連接數(shù)據(jù)庫(kù),一段時(shí)間沒(méi)有數(shù)據(jù)操作會(huì)關(guān)閉連接,再次訪問(wèn)就會(huì)拋出異常,如何解決?3. 按照本節(jié)給的代碼“膽小如鼠”并不能變成紅色4. jpa mysql 如何id自增初始值?5. mysql查詢之后排列問(wèn)題6. java - 讀寫(xiě)鎖中 寫(xiě)鎖的降級(jí)問(wèn)題7. [前端求職必看]前端開(kāi)發(fā)面試題與答案精選_擴(kuò)展問(wèn)題8. javascript - vue項(xiàng)目里的package.json9. python - nginx 小白, nginx 啟動(dòng)后 80 端口無(wú)法訪問(wèn)10. javascript - 問(wèn)下npm package json中的devDependencies 與dependencies的?
