1

我已经看到了这个问题(参见底部的链接),但我似乎无法找到答案。问题是我在具有作为主键的自动增量 ID 的表上插入数据,以及具有唯一索引的另一个字段以避免重复。这是可行的,但是当这种情况发生时,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
)

有关的

4

2 回答 2

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 再执行更新

于 2014-07-16T15:58:10.570 回答
0

感谢这个问题,我已经能够修复该错误。问题是SELECT(:field1, :field2)不应该有括号。所以查询应该是:

INSERT INTO
    content(field1, field2)
SELECT :field1, :field2 FROM DUAL
WHERE NOT EXISTS(
    SELECT field1, field2
    FROM content
    WHERE field1 = :field1
)
于 2014-04-11T20:18:19.863 回答