首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Lite空白行id,即使在删除该行之后也是如此

SQL Lite空白行id,即使在删除该行之后也是如此
EN

Stack Overflow用户
提问于 2011-12-29 19:06:01
回答 2查看 1.2K关注 0票数 3

比方说a.db,我有一个SQLite DB文件。表a中有100行。当我给出

代码语言:javascript
复制
SELECT * FROM a WHERE rowid BETWEEN 1 AND 100

它给出了前100个结果。现在,如果我从表中删除前2行,并运行

代码语言:javascript
复制
SELECT * FROM a WHERE rowid BETWEEN 1 AND 100 

它只给了我98行。当我给出查询的时候

代码语言:javascript
复制
SELECT * FROM a WHERE rowid = 1 

它给了我一个空行。数据库似乎没有重新排列rowid。

请帮帮我..有没有办法强制SQLite重新排列行ids?

EN

回答 2

Stack Overflow用户

发布于 2011-12-29 22:50:03

在SQLite中,rowid只是一个包含autoincremented值的整型列。唯一可以保证的是,每个rowid对于该表都是唯一的--仅此而已。你不能保证rowids是连续的,你甚至不能保证每个数字都会被使用!例如,如果插入失败,在失败的插入中使用的行ID可能会被跳过,并且永远不会再使用(如果显式使用了autoincrement关键字--否则,如果删除了一行,则任何新插入的数据都可以自由地重用它的行ID)。

如果您希望rowid是连续的和自动更新的,则必须创建您自己的rowid列版本,并使用触发器对其进行更新。

票数 1
EN

Stack Overflow用户

发布于 2012-11-06 15:26:53

我找到了答案。我们需要在每次删除后运行Vacuum查询。这将重新排列所有的rowindex并删除死行。

http://sqlite.org/lang_vacuum.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8667077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档