在表创建后是否可以添加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将表定义存储为其 sqlite_master
表 中 CREATE TABLE
命令的文本副本;请查看此查询的结果:
SELECT sql FROM sqlite_master WHERE type='table' AND name='skills';
将您的级联规范添加到该字符串中,然后使用PRAGMA writable_schema=1;
启用对sqlite_master
的写访问权限,并将新表定义写入其中:
UPDATE sqlite_master SET sql='...' WHERE type='table' AND name='skills';
然后重新打开数据库。
警告: 这仅适用于不改变表格磁盘格式的更改。如果您进行任何更改,更改记录格式(例如添加/删除字段或修改rowid
),您的数据库将会出现严重问题。