2013-03-23 107 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的执行由第一那么你的更新