Sqlite更新和自动增量值

时间:2012-04-18 14:44:27

标签: sqlite database-schema auto-increment

我想更新数据库的架构。我复制了自动生成的脚本,但每个表脚本之后的最后一行是:

UPDATE "main"."sqlite_sequence" SET seq = 8 WHERE name = 'table';

sec值对于我安装的数据库确实是正确的,但在其他安装上可能会有所不同。那么,将它设置为0是安全的,还是应该从每个安装的表中选择它?或者我可以跳过这一行并在没有它的情况下运行脚本吗?

1 个答案:

答案 0 :(得分:1)

如果通过“自动生成”脚本表示数据库的完整.dump,那么它将包含create table语句和insert语句,因此您可能希望update将被执行。

如果修改自动生成的脚本,那么显然可以根据需要更改seq值。

以下是documentation所说的内容:

  

SQLite跟踪表所持有的最大ROWID   使用特殊的SQLITE_SEQUENCE表。 SQLITE_SEQUENCE表是   每当普通表时自动创建和初始化   包含一个AUTOINCREMENT列。的内容   可以使用普通的UPDATE,INSERT修改SQLITE_SEQUENCE表,   和DELETE语句。但是对这个表进行修改会   可能扰乱AUTOINCREMENT密钥生成算法。确保   在你做出这些改变之前,你知道自己在做什么。

最后,您需要确保seq值与最高值匹配。这表明:

sqlite> create table foo (a INTEGER PRIMARY KEY AUTOINCREMENT, b text);
sqlite> insert into foo values (NULL, 'blabla');
sqlite> select * from foo;
1|blabla
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE foo (a INTEGER PRIMARY KEY AUTOINCREMENT, b text);
INSERT INTO "foo" VALUES(1,'blabla');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('foo',1);
COMMIT;