当前位置:  开发笔记 > 数据库 > 正文

SQLite - 一种删除和添加新对象的智能方法

如何解决《SQLite-一种删除和添加新对象的智能方法》经验,为你挑选了1个好方法。

我在我的数据库中有一个表,我希望我的表中的每一行都有一个唯一的ID,并且要有后续命名的行.

例如:我有10行,每行有一个id - 从0开始,结束于9.当我从表中删除一行时,让我们说 - 行号5,出现一个"洞".然后我添加了更多的数据,但"洞"仍然存在.

对我来说,知道确切的行数并拥有每一行数据以便随意访问我的表非常重要.

在sqlite中有一种方法可以做到吗?或者我是否必须手动管理删除和添加数据?

谢谢你,伊利亚.



1> Stephen Jenn..:

可能值得考虑你是否真的想要这样做.主键通常不应在行的生命周期内更改,并且您始终可以通过运行来查找总行数:

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上肯定会更长.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有