是否可以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';
sqlite_master
将您的级联规范添加到该字符串,然后启用对with的写入访问权限PRAGMA writable_schema=1;
并将您的新表定义写入其中:
UPDATE sqlite_master SET sql='...' WHERE type='table' AND name='skills';
然后重新打开数据库。
警告:这仅适用于不更改表的磁盘格式的更改。如果您确实进行了更改记录格式的任何更改(例如添加/删除字段,或修改rowid
),您的数据库将严重崩溃。