我知道如果發生複製異常,我可以使用ON DUPLICATE KEY UPDATE
,然後在MySQL中執行無操作操作,但有沒有更高效的方法?如何在沒有操作的情況下發生重複密鑰異常?
3
A
回答
1
INSERT IGNORE INTO tableName ....
看到Docs
1
雖然這是真的,我發現,這樣做INSERT IGNORE
會在您的汽車增量的ID孔。特別是,如果您執行INSERT IGNORE
並且它與當前行發生衝突,則不會寫入任何數據(您要的數據),但是該表的auto_increment值會加1。
如果你像我一樣麻醉,自動增量欄中的孔會殺死你。所以我傾向於不這樣做。我只是這樣做:
INSERT INTO TABLE (column list) VALUES (value list) ON DUPLICATE KEY UPDATE random_column = random_column
這確實成功無操作。這純粹是一種風格問題,但我認爲這種方法更清潔。
+0
-1 1)您答案是基於表格確實有附加列的要求。 2)你的答案不能解決你所說的auto_increment「漏洞」。以下SQL說明ID#2被跳過了。CREATE TABLE foo(ID INT NOT NOT PRIMARY KEY AUTO_INCREMENT,Bar INT,Qaz INT,UNIQUE KEY(Bar))ENGINE = INNODB; INSERT foo(Bar)VALUES(1); INSERT foo(Bar)VALUES(1)ON DUPLICATE KEY UPDATE Qaz = Qaz; INSERT foo(Bar)VALUES(2); SELECT * FROM foo; – 2015-04-03 07:10:05
相關問題
- 1. 如果任何異常情況發生
- 2. 如何在發生異常情況下使硒進行拍照
- 3. 有沒有辦法在發生密鑰時刪除重複項?
- 4. 在追蹤中沒有「提高」的情況下引發異常?
- 5. java如何在沒有try-catch的情況下顯示異常
- 6. 在沒有延遲當前操作的情況下觸發NSNotification
- 7. 如何在沒有eval的情況下執行此操作()
- 8. 如何在沒有WIN32 API的情況下執行此操作?
- 9. 如何在沒有圖形API的情況下操作圖形?
- 10. 在沒有密鑰的情況下加入數據幀
- 11. 在沒有迭代的情況下獲取密鑰YAML-cpp
- 12. 在沒有複製因子的情況下在cassandra *中設置密鑰空間
- 13. 如何在沒有事務的情況下發生死鎖?
- 14. 避免在沒有原始指針的情況下複製地圖的密鑰
- 15. 在沒有ssh-keygen的情況下生成SSH密鑰對(private/public)
- 16. 如何在沒有密碼的情況下在android中存儲私鑰
- 17. 如何在沒有PEM密鑰的情況下進入EC2實例?
- 18. 如何在沒有人知道的情況下共享AWS密鑰
- 19. 如何在任何可能發生的情況下捕獲異常?
- 20. Skype如何在沒有端口轉發的情況下工作?
- 21. 如何在不知道密碼的情況下重置密鑰庫?
- 22. 如何在沒有硬編碼的情況下在cloud-init中引用AWS訪問密鑰(密鑰)
- 23. gitolite可以在沒有用戶ssh密鑰的情況下工作
- 24. 如何在沒有調試器的情況下在運行時發生異常的行號?
- 25. 如果我已經使用github作爲密鑰,如何在沒有密碼的情況下sshsh?
- 26. 沒有密鑰通道的情況下從Java密鑰存儲沒有存儲通道導出私鑰
- 27. 在這種情況下,操作符重載如何工作?
- 28. 在異常情況下關閉流 - 確定假定可能發生異常?
- 29. 如何在密鑰保存一段時間後重復操作?
- 30. 在沒有進入try塊的情況下捕獲異常?
謝謝,我沒有意識到,如果發生重複鍵異常,INSERT IGNORE仍然不插入記錄。很有幫助。 – stevebot 2011-03-08 00:20:33
它確實* *做一個洞,該表的AUTO_INCREMENT計數器,但是,我覺得不可取...... – Landon 2015-04-02 21:26:41
@Landon不正確的(與InnoDB的'innodb_autoinc_lock_mode' = 1(默認值)或2 – 2015-04-03 07:12:05