使用SQLite3我得到了以下表格:
| Idx | Foo | Bar |
|-----|-------|---------|
| 1 | It's |something|
| 2 | and | even |
| 5 | more |wildcard |
Idx是INTEGER PRIMARY KEY AUTOINCREMENT。
如您所见,Idx 3和4未被删除,因为它们已被删除。我可以让这些Idx再次使用吗?
我对SQL不是很坚定但是afaik,我需要自动增量来确定行,毫无疑问,其他所有列都可能有双重。
答案 0 :(得分:2)
正如SQLite documentation所说:
如果表包含INTEGER PRIMARY KEY类型的列,那么 column成为ROWID的别名。 [...]使用AUTOINCREMENT,行 自动选择的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>