2013-08-17 166 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. –