在执行SQLite alter table技巧时更新外键引用

时间:2011-02-04 12:17:35

标签: sqlite foreign-keys alter-table

在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?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

不能说2011年的行为是否不同。