我试图使用以下方法更改表中每一行的id (主键,AUTO_INCREMENT):
UPDATE foo SET id = id + 4;但它给了我:
Duplicate row for primary key value 5或者其他类似的东西。
我怎么才能解决这个问题?是否存在按向后顺序更新行的查询,因此不会发生这种情况?
谢谢。
发布于 2014-02-26 07:38:43
这是在单个SQL语句中执行此操作的解决方案。
UPDATE foo F
INNER JOIN (SELECT id FROM foo ORDER BY id DESC) F2
ON F.id = F2.id
SET F.id = F.id + 4发布于 2014-02-26 06:55:22
这可能不是最有效的方法。但是您可以尝试进行选择,按id从最大到最小进行排序,然后逐个修改。再一次,它是低效的,但它完成了工作。
发布于 2014-02-26 07:00:09
您可以添加一个额外的column id2,设置column id2 value=id+4,然后设置id=id2。
update :或者您可以尝试切换检查约束OFF,进行更新并将其切换为ON。
https://stackoverflow.com/questions/22033889
复制相似问题