SQLite Drop Column和Cascading Delete

时间:2013-08-17 14:40:28

标签: sql sqlite ddl

我研究过如何使用SQLite删除列。由于缺少DROP COLUMN语句,我正在考虑使用以下解决方法:

Delete column from SQLite table

这涉及将所有数据移动到临时表中,删除原始数据,然后重新创建它。

如果我对要修改的表有级联删除依赖关系,如何防止任何相关表丢失数据?

实施例

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中删除Column“dummy”,但我不想影响表B中的任何行。可以这样做吗?

2 个答案:

答案 0 :(得分:2)

可以禁用外键约束with a PRAGMA。 只需在删除记录之前执行PRAGMA foreign_keys = off

答案 1 :(得分:0)

级联删除基于记录(行)而非属性(列)。删除虚拟列不会导致任何级联删除,因为您没有从父表中删除任何记录。