8

是否可以ON DELETE CASCADE在创建表后将其添加到表中?

我的架构如下:

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

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

4

1 回答 1

11

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),您的数据库将严重崩溃。

于 2012-10-31T09:37:15.713 回答