sqlite - 在创建 sqlite3 表后添加 ON DELETE CASCADE 行为

标签 sqlite ddl

是否可以在表创建后添加 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 command不能做你想做的事。

但是,绕过SQL解释器直接改变内表定义是可能的。 SQLite 在其 sqlite_master table 中将表定义存储为 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),您的数据库将会崩溃。

关于sqlite - 在创建 sqlite3 表后添加 ON DELETE CASCADE 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150075/

相关文章:

python - Flask 数据库可以在开发中使用,但不能在 uWSGI 的生产中使用

sqlite - 限制ORDER BY的SQLite查询

sqlite - 在 SQLite 上使用 MicroLite

mysql - 将 MySQL DDL 转换为 SQL Server DDL

postgresql - 从其他列值自动生成列值并用作 PRIMARY KEY

mysql - MYSQL8.0.11上窗口函数括号错误

sqlite - 房间的日历类型转换器(Kotlin)

sql - 简单的sqlite查询,升序排列

sql - 我应该如何将 DDL 更改从一个环境迁移到另一个环境?

sql-server - SQL Azure 友好数据库版本控制理念