2011-07-31 42 views

回答

5

如果您使用ALTER TABLERENAME TO重命名,則作爲this page描述(從SQLite的文檔)指數仍將工作:

SQLite中的ALTER TABLE命令允許用戶重命名錶[...]如果正在重命名的表具有觸發器或索引,則這些表在重命名後仍保留附加到表中。

但是請注意,不允許重命名。這是SQL features not implemented by sqlite之一:

只支持ALTER TABLE命令的RENAME TABLE和ADD COLUMN變體。其他類型的ALTER TABLE操作(例如DROP COLUMN,ALTER COLUMN,ADD CONSTRAINT等)被省略。

沒有名稱(除了在具有PK的感覺),這樣就沒有真正對其進行重命名的方式。

+0

有沒有辦法複製從一個列到另一個的信息,然後刪除第一列? – joshim5

+0

看到這個[其他SO問題](http://stackoverflow.com/questions/805363/how-do-i-rename-a-column-in-a-sqlite-database-table)上重命名列 –

+0

我實際上只是看看:)。第一個答案看起來不錯,但我應該如何處理這些指數? – joshim5

0

是的,老的指數仍可正常使用rake任務

在這裏看到一個優秀的博客。

請注意,sqlite不關心索引的名稱。最初創建索引時,通常會根據表和字段來命名索引,因此當您重命名錶時,索引仍然會包含舊錶的名稱。這可能會導致問題,當你比如:

  • 轉儲表
  • 重命名舊錶:

    sqlite3 "$DB" "PRAGMA busy_timeout=20000; ALTER TABLE '$TABLE' RENAME TO '$TABLE"_backup"'" 
    
  • 重新導入轉儲的表

這將導致一個錯誤,指數已經存在

解決方案:重命名索引過,或刪除他們在改名錶重新導入前原(見this answer)。