我能够在现有表中插入新行时生成数字序列。例如我有,
Row1 1
Row2 2
Row3 3
现在如果我删除second Row
它就变成了,
Row1 1
Row3 3
但我想得到的是,
Row1 1
Row3 2
有没有办法在不手动更新数据库中的每一行的情况下获得这个?
我能够在现有表中插入新行时生成数字序列。例如我有,
Row1 1
Row2 2
Row3 3
现在如果我删除second Row
它就变成了,
Row1 1
Row3 3
但我想得到的是,
Row1 1
Row3 2
有没有办法在不手动更新数据库中的每一行的情况下获得这个?
您的问题的答案是“是”。您可以更新除第一行之外的每一行。
update t
set id = id-1
where id > 1
好的,我理解你的意图,所以让我少说点字面意思。没有理由更改表本身的 id。您可以在查询时进行计算:
select t.*, row_number() over (order by id) as seqnum
from t
您甚至可以将其放入视图中,以使其更广泛和一致地可用。
如果删除行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