Я использую "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
, чтобы быть чем-то не существующим, будет ли он автоматически удален?
Ну, я знаю, некоторые из вышеперечисленных вопросов могут быть программно понятны, но я хочу также знать, зависит ли какой-либо из этих поставщиков базы данных или нет.
Просветите свет.