2014-02-26 69 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