2011-07-31 105 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)。