Как удалить запись, если у двух таблиц есть ссылки друг на друга по внешнему ключу? [закрыто]

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

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

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

3
задан 27 February 2010 в 12:46
2 ответа

Имейте Вас попробованный:

UPDATE table1 SET reference=NULL;
DELETE FROM table2 WHERE id=1;
DELETE FROM table1 WHERE id=1;

Путем очистки ссылки ограничение FK не должно больше быть проблемой.

2
ответ дан 3 December 2019 в 06:50

У Вас есть две опции. Нужно очистить ссылку как Горилла, на которую указывают в его сообщении. Вы делаете это путем установки в NULL ссылки или чего-то подобного, затем удаляете сообщения в правильном порядке, но это не то, что Вы обычно хотите сделать.

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

Синтаксис для установки таблицы для поддержки каскадов выглядит примерно так:

CREATE TABLE car(
        car_id serial PRIMARY KEY,
        owner_id integer NOT NULL REFERENCES owner ON DELETE CASCADE);

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

В зависимости от типа базы данных Вы используете команду ALTER TABLE для представления каскадного удаления в схеме.

1
ответ дан 3 December 2019 в 06:50

Теги

Похожие вопросы