Uso "ON DELETE CASCADE" regularmente pero nunca uso "ON ACTUALIZAR CASCADE" ya que no estoy tan seguro de en qué situación será útil.
En aras de la discusión, veamos un 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 "EN ELIMINAR CASCADA", si idse elimina un padre con un, se eliminará parent_id = parent.idautomáticamente un registro en hijo con . Esto no debería ser un problema.
¿Esto significa que "EN ACTUALIZACIÓN EN CASCADA" hará lo mismo cuando
idse actualice el padre?Si (1) es verdadero, significa que no hay necesidad de usar "EN ACTUALIZACIÓN EN CASCADA" si
parent.idno es actualizable (o nunca se actualizará) como cuando estáAUTO_INCREMENTo siempre está configuradoTIMESTAMP. ¿Está bien?Si (2) no es cierto, ¿en qué otro tipo de situación deberíamos usar "EN ACTUALIZACIÓN EN CASCADA"?
¿Qué sucede si (por alguna razón) actualizo
child.parent_idpara que sea algo que no existe, entonces se eliminará automáticamente?
Bueno, lo sé, algunas de las preguntas anteriores se pueden probar mediante programación para comprender, pero también quiero saber si algo de esto depende del proveedor de la base de datos o no.
Por favor, arroja algo de luz.