2013-03-23 103 views
1

我看到過這個問題(見底部的鏈接),但我似乎無法找出答案。問題在於我使用自動增量ID(主鍵)插入數據,另一個字段使用UNIQUE索引來避免重複。這是有效的,但是當這種情況發生時,ID會增加,儘管沒有數據被存儲。防止重複條目自動增加

最好刪除自動增量,並自己處理它,選擇最大(ID)?


目前,我已經嘗試了幾種策略,使其作爲是工作,包括INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE

我最近嘗試使用下面的查詢:

INSERT INTO 
    content(field1, field2) 
SELECT(:field1, :field2) FROM DUAL 
WHERE NOT EXISTS(
    SELECT field1, field2 
    FROM content 
    WHERE field1 = :field1 
) 

相關

+0

where和order倒不如只是爲了讓它走了。這種「虛增」不會傷害任何人。順便說一下,1000個問題的重複。 – 2013-03-23 15:22:48

+0

在某些情況下,這樣的「假增量」可能不是問題,但我有大量的數據需要解析,並且每隔30個我就插入大約1條記錄。問題更多地集中於避免這種情況的方法,即我現在正在使用的查詢或手動處理auto_increment。 – aurbano 2013-03-23 15:28:55

+1

您應該回答您自己的問題(並接受),而不是使用解決方案更新它,如以下網址中所示:http://stackoverflow.com/help/self-answer – jabaldonedo 2014-02-25 12:31:05

回答

0

感謝this question我已經能夠解決這個錯誤。問題是SELECT(:field1, :field2)不應該有括號。因此,查詢應該是:

INSERT INTO 
    content(field1, field2) 
SELECT :field1, :field2 FROM DUAL 
WHERE NOT EXISTS(
    SELECT field1, field2 
    FROM content 
    WHERE field1 = :field1 
) 
0

你可能只是做一個ORDER BY :)

UPDATE 'table' 
    SET column_id = column_id+1 
    WHERE column_id > [point where you want a un-occupied key] 
    ORDER BY column_id DESC 

MySQL的執行由第一那麼你的更新