我有一個SQLite表,其中包含一個「ID」列,它是INTEGER PRIMARY KEY。SQLite:*防止*刪除所有行後重新設置PRIMARY KEY值
當我插入時,該值按預期遞增。
但是,當我刪除所有行時,該列的值將在下一個插入時恢復爲1。
有沒有辦法讓列值從刪除前的最高值繼續增加?
例如:
- (空表)
- 插入
- 插入
(第二行的ID值是2時,下一個插入將是3)
- 刪除所有行
- 插入
(此最新的行ID值是1,但我希望它是3)
我有一個SQLite表,其中包含一個「ID」列,它是INTEGER PRIMARY KEY。SQLite:*防止*刪除所有行後重新設置PRIMARY KEY值
當我插入時,該值按預期遞增。
但是,當我刪除所有行時,該列的值將在下一個插入時恢復爲1。
有沒有辦法讓列值從刪除前的最高值繼續增加?
例如:
(第二行的ID值是2時,下一個插入將是3)
(此最新的行ID值是1,但我希望它是3)
如果AUTOINCREMENT關鍵字出現在INTEGER PRIMARY KEY之後,則會更改自動ROWID分配算法,以防止在數據庫的整個生命週期中重複使用ROWID。換句話說,AUTOINCREMENT的目的是防止重複使用以前刪除的行中的ROWID。
您正在使用什麼版本的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
關鍵字。
這似乎這樣的伎倆。我在這個頁面的第1項中被「應該避免,如果不是非常需要,通常不需要」。 – dlchambers