好吧,我处境相当困难,或者至少我是这么认为的。我一直在研究如何解决我的问题,但实际上空手而归。
删除行后,我需要能够重新索引表格的rowid。这种方式在任何给定的时间,当我想通过rowid更新或索引行时,它正在访问正确的行。
现在,对于那些问你原因的人。基本上我正在连接一个用C编程的“自制”数据库,它实际上只是一堆内存位置,所有访问都像db表一样。所以我想说的是他们可以通过在表中搜索一个值来查找一行,或者简单地说我想要第6行。最后,表可以包含任何内容,以及任何意味着他们不创建的值作为索引的列,最终我唯一能够逐行索引的是我所知道的rowid。
所以我发现VACUUM可以做我想要的或者需要的但是看起来数据库所在的系统没有提供sqlite权限来写,所以当VACUUM运行时它会带来错误。 (错误14或无法打开数据库文件)(我也知道我的数据库是打开的,这不是问题,但没有写权限是我能想出的唯一原因)我也读过一些关于自动增量或类似的东西,但没有真正理解/认为这将能够解决我的问题。
来自sqlite或数据库天才的任何建议或想法,将不胜感激。
答案 0 :(得分:1)
不确定我是否完全理解了您的问题,但如果您可以使用SQL代码,则可以编写查询来更新ID(假设它们密集排列)。
您可以使用以下查询:
UPDATE t1
SET id = (SELECT rank
FROM (SELECT id,
(
SELECT count()+1
FROM (SELECT DISTINCT id
FROM t1 AS t
WHERE t.id < t1.id
)
) rank
FROM t1
) AS sub
WHERE sub.id = t1.id
);
您可以在SQLFiddler中查看我的演示。在本演示中,如果同时运行所有查询,您将看到DELETE
和UPDATE
语句的结果(以模拟您的情况)。