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. 請(qǐng)問(wèn)朱老師,如何配置url訪問(wèn)路由2. 輸入地址報(bào)以下截圖錯(cuò)誤,怎么辦?3. node.js - nodejs開發(fā)中常用的連接mysql的庫(kù)4. python 字符串匹配問(wèn)題5. 為啥獲取不到呀?6. php怎么用isMobile()函數(shù)識(shí)別pc端移動(dòng)端自動(dòng)跳轉(zhuǎn)7. php - TP5的登錄驗(yàn)證問(wèn)題8. python - 如何獲取rabbitmq連接的celery的個(gè)數(shù)9. mysql分庫(kù)分表量級(jí)疑問(wèn)10. mysql儲(chǔ)存json錯(cuò)誤
