2010-01-15 64 views
1

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

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

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

我想改变现有的sqlite3的数据库使用显式主键,而不是隐含的rowid的,所以我必须在必要时运行真空的能力。我能否在不重建整个数据库的情况下执行此操作?

+2

SQLite再次敲击... – 2010-01-15 05:05:35

回答

1

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

  1. 从原始表创建一个临时表与正确的模式
  2. 所有数据复制到临时表
  3. 删除原始表
  4. 重命名临时表

我建议你使用一个应用程序,如SQLiteman为你做到这一点。

+0

SQLite绝对支持ALTER TABLE。 – Bill 2010-01-15 11:59:02

+2

@ Bill:你说得对,但你只能用它来添加列或重命名表。 – 2010-01-15 15:07:01