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