удалить родителя автоматически, если ребенок был удален - PullRequest
0 голосов
/ 29 марта 2019

Это моя база данных.

enter image description here

Я получил такие данные:

LikeDislike
|-------------|--------------|-----------------|
|      id     |     userId   |    createdAt    |
|-------------|--------------|-----------------|
|       1     |       1      |    2019-03-26   |
|-------------|--------------|-----------------|

RoomLikes
|------------------|--------------|
|   likeDislikeId  |     roomId   | 
|------------------|--------------|
|       1          |       1      |
|------------------|--------------|

Я хочу сделать:

  1. Когда я удаляю данные из RoomLikes, например DELETE FROM roomlikes where id = 1
  2. Данные в LikeDislike, связанные с RoomLikes, будут автоматически удалены.

Есть ли способы автоматического удаления данных родителя, если данные ребенка были удалены?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Вы можете использовать следующие запросы

ALTER TABLE RoomLikes добавить ссылки внешнего ключа (likeDislikeId) LikeDislike (id) ON DELETE CASCADE;

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

1 голос
/ 29 марта 2019

Правильно ли, что запись в LikeDislike содержит ровно 1 дочернюю запись, которая является RoomLike или CommentLike?

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

1 голос
/ 29 марта 2019

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

DELETE RoomLikes, LikeDislike
FROM RoomLikes
INNER JOIN LikeDislike ON RoomLikes.likeDislikeId = LikeDislike.id
WHERE roomlikes.id=1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...