SQLite3和隐式rowid

时间:2010-01-15 04:58:52

标签: sqlite rowid

如果未指定主键,SQLite3会为每个表提供一个名为rowid的默认主键。但是,看起来依赖于此有一些缺点:

  

VACUUM命令可能会更改没有显式INTEGER PRIMARY KEY的表中条目的ROWID。

http://www.sqlite.org/lang_vacuum.html

我想更改现有的SQLite3数据库以使用显式主键而不是隐式rowid,因此我可以在必要时运行vacuum。我可以在不重建整个数据库的情况下这样做吗?

1 个答案:

答案 0 :(得分:1)

您无需重建整个数据库。但是,由于SQLite不支持ALTER TABLE语句,您需要:

  1. 使用正确的架构创建临时表
  2. 将原始表中的所有数据复制到临时表
  3. 删除原始表格
  4. 重命名临时表
  5. 我建议您使用SQLiteman等应用为您执行此操作。