SQL Каскадные удаляет

У меня есть вопрос о каскадном удалении и ссылках на внешний ключ: допустим, следующие таблицы:

ITEMX                 | ITEMY
------------------    | ------------
ID    FKID_ITEMY      | ID
1     1               | 1
2     1               |

Для FKID_ITEMY существует каскадное удаление, так что если я удаляю строку в ITEMX, соответствующий элемент в ITEMY будет удален. Мой вопрос:

Будет ли удаление строки с идентификатором 1 в ITEMX удалять строку с идентификатором 1 в ITEMY?

Или просто удалите идентификатор строки 1 в ITEMX, потому что идентификатор строки 2 все еще ссылается на идентификатор строки 1 в ITEMY?

Другими словами, я хотел бы, чтобы строка ID 1 элемента была удалена, когда на нее больше нет ссылок. Достигнет ли это каскадного удаления?

1 ответ

Решение

У вас есть концепция каскадного удаления в обратном направлении.

Даже если вы объявите FKID_ITEMY с опцией каскадного удаления, ничего не произойдет, если вы удалите ITEMX, где ID=1.

Каскадное поведение влияет на то, что происходит, если указанная строка в ITEMY удаляется. Если вы удалите ITEMY, где ID=1, он удалит обе строки в ITEMX, которые ссылаются на эту строку.

Вы объявляете каскадное поведение внешнего ключа в зависимой таблице, поскольку у вас может быть другая зависимая таблица ITEMZ, и вы хотите, чтобы она велась по-другому. Например, если вы пытаетесь удалить строку в ITEMY, вы хотите, чтобы она была отменена, если в ITEMZ есть какие-либо ссылочные строки.

Другие вопросы по тегам