如何生成唯一的序列号-sql

时间:2013-06-10 13:56:14

标签: sql

我能够在现有表中插入新行时生成数字序列。例如,我有,

Row1 1
Row2 2
Row3 3

现在,如果我删除second Row就变成了

Row1 1 
Row3 3

但我想得到的是,

Row1 1
Row3 2

有没有办法获得这个而无需手动更新数据库中的每一行?

2 个答案:

答案 0 :(得分:2)

你的问题的答案是“是”。您可以更新的每一行,除了第一行。

update t
    set id = id-1
    where id > 1

好的,我理解你的意图,所以让我不那么直白了。没有理由更改表中的id。您可以在查询时进行计算:

select t.*, row_number() over (order by id) as seqnum
from t

您甚至可以将其置于视图中,以使其更广泛且始终可用。

答案 1 :(得分:1)

如果删除num = 2

您可以执行以下操作:

UPDATE `table` SET `num` = `num` - 1 WHERE `num` > 2

同样,如果您在某处插入一行,则可以增加num以为新记录腾出空间。

UPDATE `table` SET `num` = `num` + 1 WHERE `num` >= 2

(2现在可用)

如果您移动记录,则可以执行以下操作:

UPDATE `table` SET `num` = `num` - 1 WHERE `num` > 2 AND `num` < 10

移动2到10

追加新记录可以是:

INSERT INTO `table` SET `num` = MAX(`num`) + 1