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 id
se elimina un padre con un, se eliminará parent_id = parent.id
automá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
id
se actualice el padre?Si (1) es verdadero, significa que no hay necesidad de usar "EN ACTUALIZACIÓN EN CASCADA" si
parent.id
no es actualizable (o nunca se actualizará) como cuando estáAUTO_INCREMENT
o 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_id
para 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.