我有一个SQLite表,有几列,包括一个“ID”列,它是INTEGER PRIMARY KEY。
插入时,此值会按预期递增。
但是,当我删除所有行时,此列的值在下一次插入时将恢复为1.
有没有办法让列值从删除前的最高值继续增加?
例如:
(第2行的ID值为2,下次插入为3)
(此最新行的ID值为1,但我希望它为3)
答案 0 :(得分:3)
如果AUTOINCREMENT关键字出现在INTEGER PRIMARY KEY之后,则会更改自动ROWID分配算法,以防止在数据库的生命周期内重用ROWID。换句话说,AUTOINCREMENT的目的是防止从以前删除的行重用ROWID。
答案 1 :(得分:0)
您使用的SQLite版本是什么?我正在使用SQLite version 3.8.11.1
。主键值未重置。
创建表并插入一些数据
sqlite> create table test (id integer primary key autoincrement, name varchar(20));
sqlite> select * from test;
sqlite> insert into test (name) values ('hello1');
sqlite> insert into test (name) values ('hello2');
sqlite> select * from test;
id name
---------- ----------
1 hello1
2 hello2
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 2
在autoincrement
列中,sqlite会在sqlite_sequence
内部表中保存序列信息,您也可以查询。
删除数据。请注意,序列保持原样。
sqlite> delete from test;
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 2
sqlite> select * from test;
sqlite> insert into test (name) values ('world1');
sqlite> insert into test (name) values ('world2');
sqlite> select * from test;
id name
---------- ----------
3 world1
4 world2
sqlite> select * from sqlite_sequence;
name seq
---------- ----------
test 4
基于此,似乎序列号在删除后保持原样。我使用的是autoincrement
关键字。