0

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

Row1 1
Row2 2
Row3 3

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

Row1 1 
Row3 3

但我想得到的是,

Row1 1
Row3 2

有没有办法在不手动更新数据库中的每一行的情况下获得这个?

4

2 回答 2

2

您的问题的答案是“是”。您可以更新第一行之外的每一行。

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

好的,我理解你的意图,所以让我少说点字面意思。没有理由更改表本身的 id。您可以在查询时进行计算:

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

您甚至可以将其放入视图中,以使其更广泛和一致地可用。

于 2013-06-10T14:01:35.080 回答
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
于 2013-06-10T13:59:42.863 回答