2010-01-15 44 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