为什么SQLITE会创建空的sqlite_sequence表?

问题描述 投票:0回答:1

我有一个包含多个表的数据库,其中第一个字段定义为:

“ID”整数非空唯一... PRIMARY_KEY('ID')

我没有对这些表中的任何一个使用 AUTOINCRMENT 关键字,但我的数据库包含一个空的 sqlite_sequence 表,我无法删除该表。将 ID 字段为 NULL 值的记录插入到这些表中会生成 ID 字段的默认增量值,但不会填充或更新 sqlite_sequence 表。有什么方法可以将这些表的最后插入的 rowid 值重置为 0 吗?

sqlite auto-increment
1个回答
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 │
└──────┘
© www.soinside.com 2019 - 2024. All rights reserved.