2011-02-04 66 views
6

在SQLite FAQ [1]中提到SQLite沒有完整的ALTER TABLE支持。在上一個關於StackOverflow [2]的問題中,提到了一個技巧來完成表格修改。在執行SQLite alter table技巧時更新外鍵引用

我想知道的是如何保持FOREIGN KEY引用,因爲它們被移動到隨後被刪除的重命名錶中。我應該對每一個與我正在修改的實際表具有外鍵關係的表執行相同的技巧嗎?

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

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

回答

5

是的,你需要做同樣的 「貓膩」。當您重命名引用的表時,外鍵約束仍然以其新名稱引用它。由於SQLite不支持「DROP CONSTRAINT」,因此您必須使用修正的外鍵約束來重建引用表。

事實上,在更正外鍵引用之前,您將無法刪除舊錶。只要PRAGMA foreign_keys=ON;,SQLite3不會讓你刪除一個仍然有外鍵引用它的表。

3

當使用PRAGMA foreign_keys=OFF禁用外鍵處理時,其他表中的當前版本的SQLite引用約束不會被重寫。

不能說2011年的行爲是否有所不同。