我能够在现有表中插入新行时生成数字序列。例如,我有,
Row1 1
Row2 2
Row3 3
现在,如果我删除,second Row
就变成了
Row1 1
Row3 3
但我想得到的是,
Row1 1
Row3 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