2014-02-26 27 views
1

我想以此来改变每一行的一个表中的id(主键,AUTO_INCREMENT):如何按特定顺序更新MySQL行?

UPDATE foo SET id = id + 4; 

但它给我:

Duplicate row for primary key value 5 

或者一些沿该线。

我该如何解决这个问题?是否有查询以更新的顺序排列的行,所以这不会发生?

谢谢。

回答

3

这是在单个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 
+1

这应该是答案。 – Dynelight

+0

@Dynelight如果你这么说。 – think123

0

这可能不是最有效的方法。但是您可以尝试进行选择,按照从最大到最小的顺序进行排序,并逐个修改它。再一次,它效率低下,但它完成了工作。

+0

你会碰巧有一个方便的查询,我可以使用? – think123

+0

如果你是从一个程序调用的话,我的意思是不要在SQL中自己做这件事。或者,您可以暂时放下密钥,进行更新并重新添加。再次,不是最优雅的解决方案,但工程。 – Dynelight

+1

嗯....不是很适合我的情况,因为我正在寻找一个只有SQL的答案。 MySQL解决方案将是首选。 – think123

0

您可以添加额外的column id2,设置column id2value=id+4,然后设置id=id2

UPDATE:或者您可以尝试切换检查限制OFF,做你的更新并切换它ON