mysql - INSERT ON DUPLICATE KEY 是如何判斷重復(fù)key的?
問題描述
使用INSERT的時(shí)候 有表T(id,A,B,C,D)
插入的時(shí)候希望通過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都是正常的
只是不知道有沒有其他問題
所以 MySQL到底是如何判斷DUPLICATE KEY的?
問題解答
回答1:這條語句相當(dāng)于:
INSERT INTO ... VALUES ...
當(dāng)INSERT(因?yàn)橹麈I或唯一鍵沖突)失敗時(shí),執(zhí)行
UPDATE ... SET ... WHERE A = a AND B = b
只是這個(gè)過程用一個(gè)原子語句來實(shí)現(xiàn)罷了,具體可參閱MySQL的官方文檔: https://dev.mysql.com/doc/ref...
如果表中有多個(gè)唯一鍵,情況就更復(fù)雜了,有興趣可以深入研究。還有一個(gè)類似的語句叫 REPLACE 跟INSERT ... ON DUPLICATE KEY UPDATE作用類似,但原理是不一樣的,有興趣可參閱: https://dev.mysql.com/doc/ref...
相關(guān)文章:
1. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.2. 為什么我ping不通我的docker容器呢???3. android - webview 自定義加載進(jìn)度條4. mysql - 怎么讓 SELECT 1+null 等于 15. javascript - 微信音樂分享6. 網(wǎng)頁爬蟲 - 用Python3的requests庫模擬登陸B(tài)ilibili總是提示驗(yàn)證碼錯(cuò)誤怎么辦?7. javascript - 微信小程序封裝定位問題(封裝異步并可能多次請(qǐng)求)8. 并發(fā)模型 - python將進(jìn)程池放在裝飾器里為什么不生效也沒報(bào)錯(cuò)9. linux - openSUSE 上,如何使用 QQ?10. python 怎樣用pickle保存類的實(shí)例?
