我已经看到了这个问题(见底部链接),但我似乎无法找到答案。问题是我在一个表上插入数据,该表具有作为主键的自动增量ID,另一个字段具有UNIQUE索引以避免重复。这有效,但是当发生这种情况时,虽然没有存储数据,但ID会增加。
删除自动增量并自行处理,选择最大值(ID)会更好吗?
目前,我已尝试了多种策略,使其按原样运作,包括INSERT IGNORE
和INSERT ... 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 :(得分: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
)
答案 1 :(得分: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首先执行where和order,然后执行更新