有没有办法按顺序在sqlite表中插入数据?

时间:2012-12-24 07:02:33

标签: iphone ios ipad sqlite

我想在SQLite表中插入一些数据,其中一列用于保存字符串值,另一列用于保存序列号。

SQLite文档说自动增量并不能保证顺序插入。 我不想跟踪以前插入的序列号。

有没有办法按顺序存储数据,而不跟踪先前插入的行?

3 个答案:

答案 0 :(得分:1)

简短的回答是,autoincrement documentation明确指出INTEGER PRIMARY KEY AUTOINCREMENT将会不断增加,但正如您指出的那样使用,而不一定顺序地使用{{1}}。因此,您显然必须修改代码,因此它不依赖于顺序值(这可能是正确的操作过程),或者您必须自己维护自己的顺序标识符。我确信这不是你想要的答案,但我认为这是现实情况。

答案 1 :(得分:1)

简短回答:不要担心AUTOINCREMENT ID序列中存在差距。处理事务数据库时,它们是不可避免的。

答案很长: SQLite不能保证AUTOINCREMENT总是会增加1,原因就是事务。

假设您有2个数据库连接,几乎同时启动了2个并行事务。第一个获得了一些AUTOINCREMENT id,它变成了之前使用的值+1。一个滴答之后,第二个交易获得下一个id,现在是+2。现在假设第一个事务由于某种原因回滚(遇到一些错误,代码决定中止它,程序崩溃等)。之后,第二个事务将提交id +2,在id编号中创建一个间隙。

现在,如果此类并行事务的数量高于2,该怎么办?您无法预测,也无法告诉当前正在运行的事务,以重用因任何原因未使用的ID。

答案 2 :(得分:0)

如果您按顺序将数据插入SQLite数据库,它们将按顺序存储。

来自文档the automatically generated ROWIDs are guaranteed to be monotonically increasing.

因此,例如,如果您想要一个Person表,那么您可以使用以下命令创建自动增量表。

CREATE table PERSON (personID integer PRIMARY KEY AUTOINCREMENT, personName string)

链接:http://www.sqlite.org/autoinc.html