加上DELETE CASCADE行为的sqlite3的表已经创建之后(Add ON DELETE C

2019-06-18 17:48发布

是否有可能增加一个ON DELETE CASCADE到表已经创建之后?

我的架构如下:

CREATE TABLE skills(name varchar, skill varchar, level int, foreign key(name) references runners(name), primary key(name, skill));

而且我想如果外键被删除级联。

Answer 1:

SQLite的的ALTER TABLE命令不能做你想做的。

然而,有可能绕过SQL解释并直接改变内部表定义。 SQLite的存储表定义为一个文本复制CREATE TABLE在其命令sqlite_master表 ; 看看这个查询的结果:

SELECT sql FROM sqlite_master WHERE type='table' AND name='skills';

您的级联规范添加到该字符串,然后启用写访问sqlite_masterPRAGMA writable_schema=1; 写你的新的表定义到它:

UPDATE sqlite_master SET sql='...' WHERE type='table' AND name='skills';

然后重新打开数据库。

警告 :这仅适用于不改变表的磁盘格式的变化。 如果你作出这样的改变记录格式(如添加/删除字段,或修改任何变化rowid ),您的数据库将可怕炸毁。



文章来源: Add ON DELETE CASCADE behavior to an sqlite3 table after it has been created
标签: sqlite ddl