我在我的数据库中有一个表,我希望我的表中的每一行都有一个唯一的ID,并且要有后续命名的行.
例如:我有10行,每行有一个id - 从0开始,结束于9.当我从表中删除一行时,让我们说 - 行号5,出现一个"洞".然后我添加了更多的数据,但"洞"仍然存在.
对我来说,知道确切的行数并拥有每一行数据以便随意访问我的表非常重要.
在sqlite中有一种方法可以做到吗?或者我是否必须手动管理删除和添加数据?
谢谢你,伊利亚.
可能值得考虑你是否真的想要这样做.主键通常不应在行的生命周期内更改,并且您始终可以通过运行来查找总行数:
SELECT COUNT(*) FROM table_name;
也就是说,每当删除创建一个漏洞时,以下触发器应"滚动"每个ID号:
CREATE TRIGGER sequentialize_ids AFTER DELETE ON table_name FOR EACH ROW BEGIN UPDATE table_name SET id=id-1 WHERE id > OLD.id; END;
我在一个示例数据库上对此进行了测试,看起来像宣传的那样工作.如果您有下表:
id name 1 First 2 Second 3 Third 4 Fourth
并删除id = 2的位置,之后表格为:
id name 1 First 2 Third 3 Fourth
此触发器可能需要很长时间并且具有非常差的缩放属性(对于您删除的每一行以及表中的每个剩余行,它需要更长的时间).在我的计算机上,在1000行表的开头删除15行需要0.26秒,但在iPhone上肯定会更长.