@n199a
Java

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

Имеется три таблицы:
- gift_certificate (сущность);
- tag (сущность);
- gift_certificate_to_tag_relation (связующая таблица для связи многие-ко-многим).
6162de11ca54c634325272.png

Записи в связующей таблице gift_certificate_to_tag_relation хранятся в виде:
6162de2d347e9050392698.png

Хочу составить MySQL запрос с помощью JOIN на удаление строки из таблицы gift_certificate (сущность). Для того, чтобы удалить строку из данной таблицы, первым делом необходимо удалить строку из связующей таблицы gift_certificate_to_tag_relation.

Вот, что я пробовал сделать:
- вариант 1:
DELETE r, gc
FROM gift_certificate_to_tag_relation AS r
LEFT JOIN gift_certificate gc on r.gift_certificate_id = gc.id
WHERE gc.id = 9;


- вариант 2:
DELETE gift_certificate, gcttr
FROM gift_certificate
JOIN gift_certificate_to_tag_relation AS gcttr ON gift_certificate.id = gcttr.gift_certificate_id
WHERE gift_certificate.id = 9;


- вариант 3:
DELETE FROM gift_certificate, gcttr
USING gift_certificate
INNER JOIN gift_certificate_to_tag_relation AS gcttr ON gift_certificate.id = gcttr.gift_certificate_id
WHERE gift_certificate.id = 9;


Но это приводит к ошибке:
[23000][1451] Cannot delete or update a parent row: a foreign key constraint fails (`gift_certificates_system`.`gift_certificate_to_tag_relation`, CONSTRAINT `gift_certificate_to_tag_relation_ibfk_1` FOREIGN KEY (`gift_certificate_id`) REFERENCES `gift_certificate` (`id`))


  • Вопрос задан
  • 697 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В свойствах внешнего ключа установите ON DELETE CASCADE. После этого дочерние записи будут удаляться автоматически при удалении родительской.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
Как вариант:
START TRANSACTION;
delete from gift_certificate_to_tag_relation where gift_certificate_id = 1;
delete from gift_certificate where id = 1;
COMMIT;


MySQL fiddle
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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