Как удалить запись, когда две таблицы имеют ссылки на внешние ключи? - PullRequest
4 голосов
/ 27 февраля 2010

Удалить любую запись из них сообщит об ошибке, как это:

ОШИБКА 1451 (23000): невозможно удалить или обновить родительскую строку: внешний ключ ограничение не выполняется

Как преодолеть эту проблему?

Ответы [ 5 ]

5 голосов
/ 27 февраля 2010

Выберите запись, позволяющую вставить null s в столбец FK, вставьте ее туда, удалите другую запись, а затем удалите первую.

4 голосов
/ 27 февраля 2010

либо

ON DELETE CASCADE

или введите NULL для одного из FK, если это возможно в вашей схеме, не можете дать больше информации, не зная продавца.

1 голос
/ 22 июля 2015
ALTER TABLE <table1> NOCHECK CONSTRAINT ALL
GO
ALTER TABLE <table2> NOCHECK CONSTRAINT ALL
GO

DELETE FROM <table1> 
GO
DELETE FROM <table2>
GO

ALTER TABLE <table1> CHECK CONSTRAINT ALL
GO
ALTER TABLE <table2> CHECK CONSTRAINT ALL
GO
1 голос
/ 27 февраля 2010

если ваш столбец AllowNull, обновите его данные до нуля, затем удалите данные.

0 голосов
/ 27 февраля 2010

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

По вашему вопросу вы можете обновить поле ключа FK в одной таблице на нулевое, а затем запустить удаление для обеих таблиц.

Но чтобы это произошло, убедитесь, что вы заранее определили оба ПК для их удаления.

...