2013-04-10 48 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