SQLite:*防止* PRIMARY KEY 值在删除所有行后重置
SQLite: *prevent* PRIMARY KEY value from resetting after delete all rows
我有一个 SQLite table,有几个列,包括一个 "ID" 列,它是 INTEGER PRIMARY KEY。
当我插入时,这个值按预期递增。
但是,当我删除所有行时,该列的值在下一次插入时恢复为 1。
有没有办法让列值从删除前的最高值继续递增?
例如:
- (空table)
- 插入
- 插入
(第2行的ID值为2,下一次插入为3)
- 删除所有行
- 插入
(最新一行的 ID 值为 1,但我希望它为 3)
您使用的是什么版本的 SQLite?我正在使用 SQLite version 3.8.11.1
。主键值未重置。
创建table并插入一些数据
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
内部 table 您也可以查询。
删除数据。请注意,序列保持原样。
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
关键字。
如果 AUTOINCREMENT 关键字出现在 INTEGER PRIMARY KEY 之后,这将更改自动 ROWID 分配算法以防止在数据库的生命周期内重复使用 ROWID。换句话说,AUTOINCREMENT 的目的是防止重复使用以前删除的行的 ROWID。
我有一个 SQLite table,有几个列,包括一个 "ID" 列,它是 INTEGER PRIMARY KEY。
当我插入时,这个值按预期递增。
但是,当我删除所有行时,该列的值在下一次插入时恢复为 1。
有没有办法让列值从删除前的最高值继续递增?
例如:
- (空table)
- 插入
- 插入
(第2行的ID值为2,下一次插入为3)
- 删除所有行
- 插入
(最新一行的 ID 值为 1,但我希望它为 3)
您使用的是什么版本的 SQLite?我正在使用 SQLite version 3.8.11.1
。主键值未重置。
创建table并插入一些数据
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
内部 table 您也可以查询。
删除数据。请注意,序列保持原样。
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
关键字。
如果 AUTOINCREMENT 关键字出现在 INTEGER PRIMARY KEY 之后,这将更改自动 ROWID 分配算法以防止在数据库的生命周期内重复使用 ROWID。换句话说,AUTOINCREMENT 的目的是防止重复使用以前删除的行的 ROWID。