我正在使用SQLite数据库。由于SQLite不支持删除/重命名/重新排序列(使用alter table命令),我正在为以下任务编写自定义方法:(备份现有表,然后创建具有匹配要求的新表等等。)其他几个主题中描述了这一点。
以下是数据库操作: DROP列 RENAME(列和数据类型) 添加列 REORDER专栏。
我想知道这些操作应该以什么顺序完成?我的困惑主要在于重命名列之前是否应该降低或者反过来?
另外,我需要一些关于如何重命名列的方法,包括数据类型和移动数据?
有什么想法吗?
答案 0 :(得分: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;