[英]How do I make rows use the rowid of a deleted row with a lower rowid than them?
如何确保已删除的 rowid 被继承的 rowid 替换? 这是一个例子:
CREATE TABLE test_table (
test_id INTEGER PRIMARY KEY,
test_name TEXT NOT NULL
);
INSERT INTO test_table (test_name)
VALUES ('A', 'B', 'C', 'D', 'E', 'F');
DELETE FROM test_table WHERE test_name = 'C';
现在结果是:
test_id | 测试名称 |
---|---|
1 | 一个 |
2 | 乙 |
4 | D |
5 | 乙 |
6 | F |
如何使已删除行之后的行覆盖它们之前未使用的 rowid? 像这样的东西:
test_id | 测试名称 |
---|---|
1 | 一个 |
2 | 乙 |
3 | D |
4 | 乙 |
5 | F |
你不想这样做。 首先, rowid
是表中行的内部标识符。 它呈现给用户,但其目的是提供一个唯一的标识符——而不是一个无间隙的数字。
其次,如果你想要一个无间隙的数字,只需使用row_number()
:
select t.*, row_number() over (order by test_id) as gapless_test_id
from test_table t;
为什么在一堆行上更改 id 是个坏主意? rowid
列通常是定义它的表中的主键。 主键应该是稳定的。 它可能用于其他表中的外键引用。 您不希望仅仅因为删除了一个中央表中的一行就必须更改数据库中的所有表。
此外,主键应该随着时间的推移保持稳定。 如果您注意到test_id = 3
具有某些特定属性,您希望“3”明天引用同一行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.