Удаление записи, только если больше нет ссылки на другую таблицу - PullRequest
0 голосов
/ 12 июня 2018

у меня есть три таблицы:

Родитель: Таблица A:

id tab_b tab_c
1  b1    c1
2  b1    c2

две дочерние таблицы: Таблица b:

id name
b1 ABC
FOREIN KEY (id) REFERENCES table A (tab_b) ON DELETTE CASCADE

Таблица c:

id name
c1 DEF
c2 GHI
FOREIN KEY (id) REFERENCES table A (tab_c) ON DELETTE CASCADE

если я хочу удалить c2 в таблице c, следует удалить только запись c2 в таблице C и запись 2 в таблице A.b1 следует удалять только в том случае, если больше нет записей со ссылкой на него.На самом деле запись в таблице b тоже будет удалена.(Я попробовал это с RESTRICT тоже, но ничего не будет удалено).Есть ли возможность сделать это с помощью ON DELETE / ON UPDATE и CASCADE / RESTRICT?

или я могу это запрограммировать в php?

Надеюсь, понятно, чего я хочу.

заранее спасибо

1 Ответ

0 голосов
/ 13 июня 2018

При использовании FK вы можете определить «ON DELETE» с помощью «CASCADE», «RESTRICT» или «SET NULL».При удалении записи, которая является FK в других записях, «CASCADE» удалит их, «SET NULL» установит FK в «NULL», а «RESTRICT» остановит весь процесс.

Что вынасколько я понимаю, хочу противоположностьЕсли у вас есть три таблицы «A», «B» и «C», где «A» содержит ссылки «nn», вы должны быть хитрыми.Что-то вроде:

DELETE IGNORE  B, C
FROM    B
INNER JOIN  A
    ON      A.tab_b = B.id
INNER JOIN  C
    ON      A.tab_c = C.id
WHERE       c.id = ?;

Если это не сработает, установите «ON DELETE CASCADE» в «A», удалите элементы в «C» вручную и используйте «AFTER DELETE TRIGGER», чтобы позаботиться о"B".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...