创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
),你的数据库将爆炸可怕。