Twitt
@Twitt

Как удалить из двух таблиц одновременно?

DELETE group_types FROM group_types
  INNER JOIN types ON types.id = group_types.type_id
WHERE group_types.id IN (тут подзапрос)

- тут удаляется только запись из таблицы group_types, если рядом с DELETE через запятую рядом указать types, то выбивается ошибка:
И оно жалуется, что
Cannot delete or update a parent row: a foreign key constraint fails CONSTRAINT `fk_group_type_id_1` FOREIGN KEY (`type_id`) REFERENCES `types` (`id`))

И мне надо понятное дело удалять сразу из двух таблиц. Как этого добиться? По идее запрос какой я кидал выше, должен был удалять из двух таблиц сразу, но он удаляет данные только из таблицы group_types.
  • Вопрос задан
  • 3553 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Поменять тип FOREIGN KEY на ON DELETE CASCADE
Тогда при удалении записи в родительской таблице все связанные записи подчинённых таблиц удалятся автоматически.
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
Вообще, когда у вас есть две таблицы и одна (назовём её таблица А) имеет внешний ключ на другую (таблица Б), то при удалении записи из таблицы Б вы должны сначала удалить связанную с ней запись в таблице А.
Т.е. перед удалением какой-то записи вы должны удалить все другие записи, которые на неё ссылаются.

Как уже написал Rsa97 можно настроить автоматическое удаление этих записей, если в ограничение FOREIGN KEY, которое у вас на столбце type_id добавить опцию ON DELETE CASCADE. Тогда, при удалении записи из таблицы types у вас автоматически удалятся все связанные с ней записи из таблицы group_types.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы