Обновлять ссылки на внешние ключи при выполнении трюка с таблицей изменений SQLite - PullRequest
6 голосов
/ 04 февраля 2011

В FAQ по SQLite [1] упоминается, что SQLite не имеет полной поддержки ALTER TABLE. В предыдущем вопросе о StackOverflow [2] упоминался трюк для выполнения модификаций таблицы.

Я хотел бы знать, как сохранить ссылки FOREIGN KEY, поскольку они перемещаются в переименованную таблицу, которая впоследствии удаляется. Должен ли я сделать один и тот же трюк с каждой таблицей, которая имеет отношение внешнего ключа с реальной таблицей, которую я изменяю?

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

[2] Как переименовать столбец в таблице базы данных SQLite?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2011

Да, вам нужно сделать тот же «трюк».Когда вы переименовываете ссылочную таблицу, ограничения внешнего ключа по-прежнему ссылаются на нее под новым именем.Поскольку SQLite не поддерживает «DROP CONSTRAINT», вам придется перестраивать ссылочные таблицы с исправленными ограничениями внешнего ключа.

Фактически вы не сможете удалить старую таблицу доВы исправляете ссылки на внешние ключи.Пока PRAGMA foreign_keys=ON;, SQLite3 не позволит вам удалить таблицу, на которую все еще ссылаются внешние ключи.

3 голосов
/ 17 ноября 2015

В текущих версиях SQLite ограничения ссылок в других таблицах не переписываются, когда обработка внешнего ключа была отключена с помощью PRAGMA foreign_keys=OFF.

Не могу сказать, было ли это поведение другим в 2011 году.

...