SQLite 两个 rowid 在我显式创建一个时创建



我有一个sqlite表,当我对数据库进行真空处理时,我需要防止id发生变化。文档中说,VACUUM不会更改具有显式INTEGER PRIMARY KEY的表的rowid。

所以,我用创建了一个表

CREATE TABLE tableName (
  "rowid" INTEGER PRIMARY KEY, 
  "updated" DATETIME DEFAULT (CURRENT_TIMESTAMP),
  "description" TEXT
)

但这就形成了一个具有两个rowid列的表。在Firefox的SQLite Manager插件中,我看到了这两种情况,当我尝试用Java访问结果集时,它会说"不明确的列:‘rowid’"。有没有一种方法可以显式创建rowid,或者我必须使用不同的名称?

rowid默认情况下是每个SQLite表的一列

如果一个表有一个由单列组成的主键,并且该列声明的类型是INTEGER(大小写混合),那么该列将成为rowid的别名。

因此,您的rowid列不会替换默认的rowid。您的密钥是默认rowid的别名

因此,您真的不应该将列命名为rowid,因为它已经被使用过了,并且会导致"不明确的列"错误,正如您已经经历过的那样。

文档指出,如果您的表包含一些INTEGER PRIMARY KEY,那么SQLite生成的rowid将不会更改。PK不需要是rowid。