Quando usar “ON UPDATE CASCADE”

Eu uso "ON DELETE CASCADE" regularmente, mas eu nunca uso "ON UPDATE CASCADE" porque não tenho tanta certeza em que situação ele será útil.

Por uma questão de discussão, vamos ver algum código.

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

Para "ON DELETE CASCADE", se um pai com umid é eliminado, um registro em criança comparent_id = parent.id será automaticamente excluído. Isso não deve ser problema.

Isto significa que "ON UPDATE CASCADE" fará o mesmo quandoid do pai é atualizado?

Se (1) for verdadeiro, significa que não há necessidade de usar "ON UPDATE CASCADE" separent.id não é atualizável (ou nunca será atualizado) como quando éAUTO_INCREMENT ou sempre definido para serTIMESTAMP. Isso esta certo?

Se (2) não é verdade, em que outro tipo de situação devemos usar "ON UPDATE CASCADE"?

E se eu (por algum motivo) atualizar ochild.parent_id para ser algo que não existe, será automaticamente eliminado?

Bem, eu sei, algumas das perguntas acima podem ser testadas programaticamente para entender, mas eu também quero saber se isso depende do fornecedor do banco de dados ou não.

Por favor, derramar alguma luz.

questionAnswers(6)

yourAnswerToTheQuestion