Когда использовать «ОБНОВЛЕНИЕ КАСКАДА»

Я регулярно использую «ON DELETE CASCADE», но никогда не пользуюсь «ON UPDATE CASCADE», так как не уверен, в какой ситуации это будет полезно.

Ради обсуждения, давайте посмотрим код.

CREATE TABLE parent (
    id INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (id)
);

CREATE TABLE child (
    id INT NOT NULL AUTO_INCREMENT, parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id)
        REFERENCES parent(id)
        ON DELETE CASCADE
);

Для "ON DELETE CASCADE", если родитель сid удалена, запись у ребенка сparent_id = parent.id будет автоматически удален. Это должно быть без проблем.

Это означает, что «ОБНОВЛЕНИЕ КАСКАДА» будет делать то же самое, когдаid родителя обновляется?

Если (1) верно, это означает, что нет необходимости использовать «ОБНОВЛЕНИЕ КАСКАДА», еслиparent.id не обновляется (или никогда не будет обновляться), например, когдаAUTO_INCREMENT или всегда установлен бытьTIMESTAMP, Это правильно?

Если (2) неверно, в какой другой ситуации мы должны использовать «ОБНОВЛЕНИЕ КАСКАДА»?

Что если я (по какой-то причине) обновлюchild.parent_id быть чем-то несуществующим, будет ли оно автоматически удалено?

Ну, я знаю, некоторые из приведенных выше вопросов можно протестировать программно, чтобы понять, но я также хочу знать, зависит ли что-либо из этого от поставщика базы данных или нет.

Пожалуйста, пролите немного света.

Ответы на вопрос(6)

Ваш ответ на вопрос