【问题标题】:Update foreign key references when doing the SQLite alter table trick执行 SQLite 更改表技巧时更新外键引用
【发布时间】:2011-06-21 08:05:30
【问题描述】:

在 SQLite FAQ[1] 中提到 SQLite 没有完整的 ALTER TABLE 支持。在 StackOverflow [2] 上的上一个问题中,提到了完成表修改的技巧。

我想知道的是如何保留 FOREIGN KEY 引用,因为这些引用被移动到随后被删除的重命名表中。我是否应该对与我正在修改的实际表有外键关系的每个表执行相同的技巧?

[1]http://www.sqlite.org/lang_altertable.html

[2]How do I rename a column in a SQLite database table?

【问题讨论】:

  • 从2018年底开始,PRAGMA foreign_keys=OFF由于SQLite主线的变化已经不够用了。您可能还需要PRAGMA legacy_alter_table=ON,但有caveats here

标签: sqlite foreign-keys alter-table


【解决方案1】:

是的,你需要做同样的“技巧”。当您重命名引用的表时,外键约束仍然以其新名称引用它。由于 SQLite 不支持“DROP CONSTRAINT”,因此您也必须使用更正的外键约束重建引用表。

事实上,在更正外键引用之前,您将无法删除旧表。只要PRAGMA foreign_keys=ON;,SQLite3 就不会让你删除仍然有外键引用它的表。

【讨论】:

    【解决方案2】:

    在当前版本的 SQLite 中,当使用 PRAGMA foreign_keys=OFF 禁用外键处理时,不会重写其他表中的引用约束。

    不能说这种行为在 2011 年是否有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多