gpt4 book ai didi

sql - 即使删除行后SQLite空白rowid

转载 作者:行者123 更新时间:2023-12-03 17:17:15 25 4
gpt4 key购买 nike

我有一个SQLite DB文件,可以说a.db。我在表a中有100行。当我给

SELECT * FROM a WHERE rowid BETWEEN 1 AND 100


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

SELECT * FROM a WHERE rowid BETWEEN 1 AND 100 


它只给我98行。当我给查询

SELECT * FROM a WHERE rowid = 1 


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

请帮忙。是否有任何方法可以强制SQLite重新排列行ID?

最佳答案

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

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

关于sql - 即使删除行后SQLite空白rowid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8667077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com