SQLite 表中的自动增量
Autoincrement in SQLite tables
我创建了一个 table,让我们在 SQLite 中将其命名为 CUSTOMERS
:
CREATE TABLE "CUSTOMERS" (
"tel" INTEGER NOT NULL,
"customer" VARCHAR ,
);
当我从 GUI(我使用 Firefox 的 SQLite 管理器)看到 table 时,我注意到有一个额外的列 rowid
,它的工作方式类似于自动递增。我的问题是,在我不使用主键的 table 中,我应该指定一个列,例如:
ROWID INTEGER PRIMARY KEY AUTOINCREMENT
如果我执行此查询 PRAGMA table_info(CUSTOMERS);
,我只会得到两列 tel
、customer
。
Sqlite 通常会自动添加一个 rowid
作为@laato 链接在评论 SqLite : ROWID
可以删除,但不需要指定。所以没有必要将它添加到Create Table.
隐藏的 rowid 允许删除的目标是单行,bu
如果您使用 ROWID
作为特定的外键,最好显式命名一个列。那将成为 rowid
.
的同义词
您可以看到 here,正如您在问题中评论的那样。
但是,如果您在这些选项之间进退两难,SQLite 建议您不要使用 AUTOINCREMENT
属性,因为:
The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and
disk I/O overhead and should be avoided if not strictly needed. It is
usually not needed.
您可以阅读更多信息 here。
我创建了一个 table,让我们在 SQLite 中将其命名为 CUSTOMERS
:
CREATE TABLE "CUSTOMERS" (
"tel" INTEGER NOT NULL,
"customer" VARCHAR ,
);
当我从 GUI(我使用 Firefox 的 SQLite 管理器)看到 table 时,我注意到有一个额外的列 rowid
,它的工作方式类似于自动递增。我的问题是,在我不使用主键的 table 中,我应该指定一个列,例如:
ROWID INTEGER PRIMARY KEY AUTOINCREMENT
如果我执行此查询 PRAGMA table_info(CUSTOMERS);
,我只会得到两列 tel
、customer
。
Sqlite 通常会自动添加一个 rowid
作为@laato 链接在评论 SqLite : ROWID
可以删除,但不需要指定。所以没有必要将它添加到Create Table.
隐藏的 rowid 允许删除的目标是单行,bu
如果您使用 ROWID
作为特定的外键,最好显式命名一个列。那将成为 rowid
.
您可以看到 here,正如您在问题中评论的那样。
但是,如果您在这些选项之间进退两难,SQLite 建议您不要使用 AUTOINCREMENT
属性,因为:
The AUTOINCREMENT keyword imposes extra CPU, memory, disk space, and disk I/O overhead and should be avoided if not strictly needed. It is usually not needed.
您可以阅读更多信息 here。