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

0

Это моя база данных отношений.

Изображение 174551

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

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 будут удалены автоматически.

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

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

Благодарю.

  • 5
    Это то, что вам нужно: УДАЛИТЬ КАСКАД ИЛИ ТРИГГЕР
  • 0
    Как насчет CommentLikes ? Похоже, у них есть внешний ключ к LikeDislike Не боитесь ли вы, что записи становятся бесхозными при удалении элемента из LikeDislike ?
Показать ещё 3 комментария
Теги:

3 ответа

1

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

DELETE RoomLikes, LikeDislike
FROM RoomLikes
INNER JOIN LikeDislike ON RoomLikes.likeDislikeId = LikeDislike.id
WHERE roomlikes.id=1;
1

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

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

1

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

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

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

  • 0
    Вы сказали, что когда я удаляю данные из родительской таблицы, данные из дочерней таблицы будут удалены, тогда возможен ли обратный путь? Я имею в виду, когда я удаляю данные дочерней таблицы, тогда данные о родителе будут удаляться.
  • 0
    Невозможно использовать только внешний ключ, но если вы хотите сделать это, возможно, вы можете использовать хранимые процедуры или триггеры

Ещё вопросы

Сообщество Overcoder
Наверх
Меню