Kiedy używać „ON UPDATE CASCADE”

Używam regularnie „ON DELETE CASCADE”, ale nigdy nie używam „ON UPDATE CASCADE”, ponieważ nie jestem pewien, w jakiej sytuacji będzie to przydatne.

Dla celów dyskusji zobacz jakiś kod.

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
);

W przypadku „DELETE CASCADE”, jeśli rodzic posiadaid jest usuwany, rekord dzieckaparent_id = parent.id zostanie automatycznie usunięty. To nie powinno być problemem.

Oznacza to, że „ON UPDATE CASCADE” zrobi to samo, gdyid jest aktualizowany?

Jeśli (1) jest prawdą, oznacza to, że nie ma potrzeby używania „ON UPDATE CASCADE”, jeśliparent.id nie jest aktualizowalny (lub nigdy nie będzie aktualizowany), jak to ma miejsceAUTO_INCREMENT lub zawsze gotoweTIMESTAMP. Czy to prawda?

Jeśli (2) nie jest prawdziwe, w jakiej innej sytuacji powinniśmy użyć „NA AKTUALIZACJI KASKADY”?

Co zrobić, jeśli (z jakiegoś powodu) zaktualizujęchild.parent_id czy coś nie istnieje, czy zostanie automatycznie usunięte?

Cóż, wiem, że niektóre z powyższych pytań mogą być testowane programowo, aby zrozumieć, ale chcę również wiedzieć, czy którykolwiek z nich jest zależny od dostawcy bazy danych, czy nie.

Proszę rzuć trochę światła.

questionAnswers(6)

yourAnswerToTheQuestion