2013-08-17 164 views
0

我已經研究瞭如何使用SQLite下降一列。由於缺乏一個DROP COLUMN語句中,我使用了以下解決方法考慮:SQLite的刪除列和級聯刪除

Delete column from SQLite table

這涉及到所有的數據移動到臨時表,刪除原,然後重新創建它。

如果我有一個級聯刪除我想修改表的依賴,我怎麼可以防止數據丟失任何相關的表?

Ex。

CREATE TABLE A (
    id INTEGER PRIMARY KEY, 
    name TEXT, 
    dummy INTEGER 
) 

CREATE TABLE B (
    id INTEGER PRIMARY KEY, 
    name TEXT, 
    a_id INTEGER, 
    FOREIGN KEY (a_id) REFERENCES A(id) ON DELETE CASCADE 
) 

比方說,我想從表A中刪除列「虛擬」的,但我不想影響表B.任何行可以這樣做?

回答

1

外鍵約束可以禁用with a PRAGMA。 在刪除記錄之前只需執行PRAGMA foreign_keys = off

0

級聯刪除是基於記錄(行)沒有屬性(列)。刪除虛擬列不會導致任何級聯刪除,因爲您不會從父表中刪除任何記錄。

+0

感謝您的快速回復。雖然我沒有特別刪除一行,但我正在刪除然後重新創建A(由於SQLite缺少DROP COLUMN功能),但是這不會影響B? –

+0

如果您要刪除表格,那麼您將刪除將驅動級聯刪除的記錄。在刪除並重新創建表A之前,您需要將表B中的數據複製到新的備份表中。然後,您需要將數據複製回表B. –