创build后,将ON DELETE CASCADE行为添加到sqlite3表中

创build完成后,是否可以将ON DELETE CASCADE添加到表中?

我的模式如下:

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

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

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

但是,可以绕过SQL解释器直接更改内部表定义。 SQLite将表定义作为CREATE TABLE命令的文本副本存储在其sqlite_master表中 ; 检查这个查询的结果:

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

将您的级联规范添加到该string中,然后使用PRAGMA writable_schema=1;启用对sqlite_master写入访问PRAGMA writable_schema=1; 并写入你的新表定义:

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

然后重新打开数据库。

警告 :这仅适用于不会更改表格的磁盘格式的更改。 如果你做任何改变logging格式(例如添加/删除字段,或修改rowid ),你的数据库将爆炸可怕。