【问题标题】:Add ON DELETE CASCADE behavior to an sqlite3 table after it has been created在创建 sqlite3 表后添加 ON DELETE CASCADE 行为
【发布时间】:2012-10-31 01:33:50
【问题描述】:

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

我的架构如下:

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

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

【问题讨论】:

  • 删除外键并重新创建?
  • 我相信 @njk 不能在 sqlite 中删除约束。

标签: sqlite ddl


【解决方案1】:

SQLite 的ALTER TABLE command 不能做你想做的事。

但是,可以绕过 SQL 解释器并直接更改内部表定义。 SQLite 将表定义作为CREATE TABLE 命令的文本副本存储在其sqlite_master 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),您的数据库将严重崩溃。

【讨论】:

    猜你喜欢
    • 2016-09-28
    • 2012-07-16
    • 2014-02-14
    • 2015-01-05
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2013-11-10
    • 2015-12-31
    相关资源
    最近更新 更多