Мне интересно, как реализована функция ON CASCADE DELETE, потому что я хотел бы иметь некоторое представление о производительности этой операции.
Предположим, у меня есть 3 таблицы: родительский, дочерний (FK, ссылающийся на родителя, включен DELETE CASCADE), внук (FK, ссылающийся на ребенка, включен DELETE CASCADE).
Теперь я хочу удалить строку в родительской таблице, а также все соответствующие записи в таблицах для детей и внуков.
Я хотел бы знать, какие запросы «построены» ON DELETE CASCADE для выполнения этой операции.
Это что-то вроде следующего?ON CASCADE DELETE реализация
SELECT child.id FROM child WHERE child.parent_id = 'parent_id';
Затем для каждого возвращаемого результата из запроса SELECT выполняется следующий запрос: DELETE FROM grandchild WHERE grandchild.child_id = 'child_id'
? Затем строка в дочерней таблице с id = child_id может быть удалена. Это повторяется до тех пор, пока все дети, возвращаемые запросом SELECT
, не будут удалены. Наконец, родитель может быть удален.
Я предполагаю, что он также может быть реализован с использованием некоторого объединения в таблицах, но тогда ограничения внешнего ключа могут потерпеть неудачу.
Спасибо за ваш ответ! Так что, с точки зрения производительности, он должен быть таким же, как я описал? Не могли бы вы привести сюда ссылку на какой-нибудь документ, ..., который подтвердит ваш ответ? Тогда я немедленно приму ваш ответ. – FilipR