如何递增id字段的所有存储值

时间:2011-10-18 16:51:12

标签: sql postgresql

我有一个名为blocks的表,主键为blockid。数据以blockid为0开始。现在,问题在于,在另一个表中,blockid's从1开始。因此,我需要获取blockid's中的所有blocks {1}}增加1.
怎么样,我这样做? 有没有一个方便的功能来做到这一点,还是我们需要写一个?或者,我是否必须手动更改它(这不会花费太长时间,但有超过100行,所以,如果我不必这样做,我更喜欢它)。

感谢您的一切。

1 个答案:

答案 0 :(得分:9)

假设blockid不是OP的主键,可以通过顺序运行两个更新语句来快速而肮脏:

UPDATE blocks
SET blockid = blockid + 1001

UPDATE blocks
SET blockid = blockid - 1000

在第一个UPDATE中,你将所有的块数增加1001. 1000只是一个任意大的数字,可以避免与其他id冲突(假设你有唯一性约束。)

在第二个语句中,你递减1000,使所有id增加1,同时避免冲突。

如果1000没有足够大的数字,你可以增加它并使其任意大。只需确保在第二次更新中匹配数字和数学。