当我明确创建一个时创建SQLite两个rowid

时间:2013-08-26 21:34:05

标签: java sqlite

我有一个sqlite表,我需要在数据库VACUUM时保持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或者我必须使用不同的名称吗?

1 个答案:

答案 0 :(得分:3)

rowid is a column of every SQLite table by default

  

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

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

因此,您实际上不应该将列rowid命名为已经使用的列rowid,并且会导致“模糊列”错误,正如您已经体验过的那样。

文档说如果你的表包含一些INTEGER PRIMARY KEY,那么SQLite正在生成的rowid将不会被更改。 PK不需要是rowid。