我有一个主键字段,我需要通过乘以10来更新。
目前我的ids是:
`id`
- 1
- 2
- ...
- 10
- 11
- etc.
要做更新我试过:
START TRANSACTION;
UPDATE status SET id = id*10;
COMMIT;
但是,我收到了pk投诉(因为1 * 10 = 10,这是当前的主键)。
我如何解决此问题并进行此更新?
更新:由于我需要更新旧版表,因此需要这样做。我不是在寻找有关数据库设计的建议,而是我将如何完成此更新。
答案 0 :(得分:3)
您的主键应该用于唯一标识每一行......不提供任何类型的排序。您不应该通过操纵主键来尝试在其他项目之间放置项目。
相反,如果您需要能够为这些行硬编码任意排序,请考虑在表中添加OrderID
列。
答案 1 :(得分:1)
好吧,虽然我们缺少更简单的问题解决方案,但您可以
INSERT INTO TEMP_TABLE SELECT id*10, --all other fields
。这不会导致id冲突。INSERT INTO
从临时表返回到原始表重要提示:请确保在此之前进行备份。
答案 2 :(得分:1)
您可以在更新查询中提供ORDER BY语句:
UPDATE status SET id = id*10 ORDER BY id DESC;
这可以防止任何冲突,因为更高的值会先更新。