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 есть какие-либо ссылочные строки.