Я использую "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
);
Для "ВКЛ. УДАЛИТЬ КАСКАД", если родитель с id удален, запись в дочернем элементе с parent_id = parent.id будет автоматически удалена. Это не должно быть проблемой.
-  Это означает, что "ON UPDATE CASCADE" будет делать то же самое, когда обновляется idродителя?
-  Если (1) истинно, это означает, что нет необходимости использовать "ON UPDATE CASCADE", если parent.idне обновляется (или никогда не обновляется), например, когда он равенAUTO_INCREMENTили всегда значениеTIMESTAMP. Это правильно?
-  Если (2) неверно, в какой другой ситуации мы должны использовать "ON UPDATE CASCADE"? 
-  Что делать, если я (по какой-то причине) обновляю child.parent_id, чтобы быть чем-то не существующим, будет ли он автоматически удален?
Ну, я знаю, некоторые из вышеперечисленных вопросов могут быть программно понятны, но я хочу также знать, зависит ли какой-либо из этих поставщиков базы данных или нет.
Просветите свет.
