我有一个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或者我必须使用不同的名称吗?
答案 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。