使用SQLite3,我得到了下表:
| Idx | Foo | Bar |
|-----|-------|---------|
| 1 | It's |something|
| 2 | and | even |
| 5 | more |wildcard |
Idx 是整数主键自动增量。
如您所见,Idx 3 和 4 未使用,因为它们已被删除。我可以让这些 Idx 再次可用吗?
我对SQL不是很坚定,但是afaik,我需要自动增量来识别行,毫无疑问,每隔一列都可以有双峰。
如SQLite文档中所述:
如果表包含整数主键类型的列,则 列成为 ROWID 的别名。[...]使用自动增量,行 使用自动选择的 ROWID 保证具有 ROWID 以前从未被同一数据库中的同一表使用过。 并且自动生成的 ROWID 保证 单调递增。
所以你的问题是"我可以让这些 Idx 再次可用吗?答案是:是的,但只是明确地,请参阅:
sqlite> create table testtable(idx INTEGER PRIMARY KEY AUTOINCREMENT, foo varchar(100), bar varchar(100));
sqlite> insert into testtable (foo, bar) values ('a', 'b');
sqlite> insert into testtable (foo, bar) values ('c', 'd');
sqlite> insert into testtable (foo, bar) values ('e', 'd');
sqlite> insert into testtable (foo, bar) values ('g', 'g');
sqlite> select * from testtable;
1|a|b
2|c|d
3|e|d
4|g|g
sqlite> delete from testtable where idx = 2;
sqlite> select * from testtable;
1|a|b
3|e|d
4|g|g
sqlite> insert into testtable (foo, bar) values ('h', 'i');
sqlite> select * from testtable;
1|a|b
3|e|d
4|g|g
5|h|i
sqlite> insert into testtable (idx, foo, bar) values (2, 'j', 'k');
sqlite> select * from testtable;
1|a|b
2|j|k
3|e|d
4|g|g
5|h|i
sqlite>