2013-04-10 87 views
0

我正在使用SQLite数据库。由于在SQLite中不支持删除/重命名/重新排序列(使用alter table命令),我正在为以下任务编写自定义方法:(取得现有表的备份,然后创建一个具有匹配需求的新表等)这在其他几个线程中都有描述。Sqlite:重命名列和数据类型

以下是DB操作: 删除列 RENAME(列和数据类型) 添加列 列重新排序。

我在想这些操作应该以什么顺序完成?我的困惑主要在于在重新命名列或其他方式之前是否应该放弃?

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

有什么想法?

回答

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; 
+0

感谢您的意见。你能详细说明一下:“如果新数据类型与旧数据类型不直接兼容,你可能需要在不同的数据类型上执行转换。”如何在SQL语句中做到这一点?这应该在Insert Into命令中完成吗?如果是这样,该怎么办? – Aqua267 2013-04-15 14:24:37

+0

铸造的语法可能类似于'cast(col as type)',其中'col'是列,'type'是SQL类型,例如real,int等。 – 2013-04-15 18:56:22

+0

谢谢。我能够实现重命名。到目前为止,我已经实现了删除,重命名,添加和重新排列列。然而,我正在运行一些测试来了解这些例程应该以什么顺序被调用?应该总是先调用列名?订单是DROP RENAME ADD REORDER列吗?有什么想法吗? – Aqua267 2013-04-24 21:03:10