gpt4 book ai didi

sqlite - sqlite_sequence表中的重复项

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

在我们的Sqlite数据库中,有一个sqlite_sequence表,该表具有带有不同seq ID的重复条目。

例如

NAME            SEQ
MyTableName1 1280
MyTableName1 3000


这些条目何时以及如何创建?我想他们在应用程序中出现了某些问题。

最佳答案

这怎么发生的?


要么


(1)第二行已插入到SQLite的处理之外,


也许


(2)这是未提交事务的最终结果,即在插入1720行时未调用setTransactionSuccessful()的情况。


注意,这似乎是矛盾的:

sqlite_sequence表中的每个普通行只有一行
使用AUTOINCREMENT的表。表的名称(如在
sqlite_master.name)位于sqlite_sequence.main字段中,
曾经插入该表的最大INTEGER PRIMARY KEY在
sqlite_sequence.seq字段。 2.6.2. The sqlite_sequence table




但是,我没有测试后一种情况。我的想法是,当事务包含用于AUTOINCREMENT列的插入时,SQLite需要跟踪未决的rowid,因此可以为此目的利用单独的行。




我想他们在应用程序中出现了某些问题。


我认为没有。由于进行了一些有限的测试,因此根据rowid使用了第一行,因此1280将被视为最高的序列号。
How is rowid determined on sqlite insertion?

因此,如果前者(将3000行插入到SQLite的管理范围之外),则AUTOINCREMENT列的下一个值将是1281(或更大)。因此3000值将被有效地忽略。

如果是后者(未提交事务),则由于未提交事务,正确的最高序列将是1280(下一个是1281或更高),而3000将被忽略,因此也不会产生负面影响。

如果由于某种原因,有一个更高的序列值,比如说AUTOINCREMENT列使用了6000,那么在有限的测试中,这将被视为最高值,而下一个将是6001(请参见前面给出的链接中进行的测试)。

简而言之,下一个序列(根据链接的有限测试)将显示为AUTOINCREMENT列中最高使用值(与不使用AUTOINCREMENT相同)或从第一个获得的值中的较高者。 sqlite_sequence表中相应名称的行(按照rowid的升序排列)。

关于sqlite - sqlite_sequence表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48424074/

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