我有一个包含多个表的数据库,其中第一个字段定义为:
“ID”整数非空唯一... PRIMARY_KEY('ID')
我没有对这些表中的任何一个使用 AUTOINCRMENT 关键字,但我的数据库包含一个空的 sqlite_sequence 表,我无法删除该表。将 ID 字段为 NULL 值的记录插入到这些表中会生成 ID 字段的默认增量值,但不会填充或更新 sqlite_sequence 表。有什么方法可以将这些表的最后插入的 rowid 值重置为 0 吗?
根据下面的SQL,我认为您使用
UNIQUE创建了
sqlite_autoindex_...
表,而不是使用AUTOINCRMENT创建了sqlite_sequence表。 *除非您创建带有 sqlite_sequence
列的表,否则永远不会创建AUTOINCREMENT
表。:
ID' 整数非空唯一... PRIMARY_KEY('ID')
医生说如下:
不要将自动索引与内部索引(名称如“sqlite_autoindex_table_N”)混淆,内部索引有时是为了实现 PRIMARY KEY 约束或 UNIQUE 约束而创建的。
例如,您创建
test
表,其中 id
列带有 PRIMARY KEY 或 UNIQUE
:
CREATE TABLE test (
id TEXT PRIMARY KEY
);
或者:
CREATE TABLE test (
id INTEGER UNIQUE
);
然后,创建
sqlite_autoindex_test_1
表,如下所示。 *我的回答解释了如何显示列名称:
.headers on
.mode box
sqlite> SELECT name FROM sqlite_master;
┌─────────────────────────┐
│ name │
├─────────────────────────┤
│ test │
│ sqlite_autoindex_test_1 │
└─────────────────────────┘
此外,您还创建了
test
表,其中包含 id
列和 INTEGER PRIMARY KEY
,如下所示:
CREATE TABLE test (
id INTEGER PRIMARY KEY
);
然后,
sqlite_autoindex_test_1
表不会创建,如下所示。
.headers on
.mode box
sqlite> SELECT name FROM sqlite_master;
┌──────┐
│ name │
├──────┤
│ test │
└──────┘