Удаление любой записи о них сообщит об ошибке, подобной этой:
ОШИБКА 1451 (23000): невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполнено.
Как побороть эту проблему?
Ты пробовала:
UPDATE table1 SET reference=NULL;
DELETE FROM table2 WHERE id=1;
DELETE FROM table1 WHERE id=1;
После очистки ссылки ограничение FK больше не должно быть проблемой.
У вас есть два варианта. Один из них - очистить ссылку, как указал Горилла в своем посте. Вы делаете это, устанавливая ссылку на null или что-то подобное, а затем удаляете сообщения в правильном порядке, но это не то, что вы обычно хотите делать.
Вместо этого вы, вероятно, захотите выполнить каскадное удаление, но ваша схема неправильно настроена для этого. Каскадное удаление означает, что сообщения, ссылающиеся на сообщение, которое вы пытаетесь удалить, также будут удалены.
Синтаксис настройки таблицы для поддержки каскадов выглядит примерно так:
CREATE TABLE car(
car_id serial PRIMARY KEY,
owner_id integer NOT NULL REFERENCES owner ON DELETE CASCADE);
Если вы настроите свои таблицы таким образом, удаление исходного сообщения (владельца в примере) приведет к удалению всех ссылок на сообщения (автомобили в примере). Вам не придется очищать ссылки и удалять все сообщения вручную.
В зависимости от типа базы данных вы используете команду ALTER TABLE, чтобы ввести каскадное удаление в вашу схему.