0

我正在使用 SQLite 数据库。由于 SQLite 不支持 drop/rename/reorder 列(使用 alter table 命令),我正在为以下任务编写自定义方法:(备份现有表,然后创建具有匹配要求的新表等等..)这在其他几个线程中有所描述。

以下是 DB 操作: DROP 列 RENAME(列和数据类型) ADD 列 REORDER 列。

我想知道这些操作应该按什么顺序进行?我的困惑主要在于 drop 是否应该在重命名列之前或以其他方式出现?

我还需要一些关于如何重命名列的指针,包括数据类型和移动数据?

有什么想法吗?

4

1 回答 1

0

首先,创建数据库备份,以防在以下说明中出现问题。

运算顺序应为CREATE newtable, INSERT INTO newtable, DROP oldtable

为每列创建一个具有正确列名和数据类型的新表。然后做这样的事情:

INSERT INTO new_table(columns, ...)
(SELECT columns, ...
FROM old_table)

如果新数据类型与旧数据类型不直接兼容,您可能需要对不同的数据类型执行强制转换。

您需要确保从旧表中选择的列与INSERT INTO语句中新表中的列定义的顺序相同。

将数据插入新表后,您可以验证是否已正确插入所有数据。请务必更新其他表中的任何外键引用,以避免外键约束出现任何问题。

然后您可以删除旧表并将新表重命名为旧表的名称:

DROP old_table;
ALTER TABLE new_table_name RENAME TO old_table_name;
于 2013-04-10T18:39:55.933 回答