Utilizo "ON DELETE CASCADE" con regularidad pero nunca utilizo "ON UPDATE CASCADE" ya que no estoy seguro de en qué situación será útil.Cuándo utilizar "ON UPDATE CASCADE"
En aras de la discusión, deja ver el 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
);
Por "ON DELETE CASCADE", si se elimina un padre con un id
, un registro en el niño con parent_id = parent.id
se eliminarán de forma automática. Esto no debería ser un problema.
Esto significa que "ON UPDATE CASCADE" va a hacer lo mismo cuando
id
de la matriz se actualiza?Si (1) es verdadera, significa que no hay necesidad de usar "ON UPDATE CASCADE" si
parent.id
no es actualizable (o nunca serán actualizados) como cuando esAUTO_INCREMENT
o siempre dispuesto a serTIMESTAMP
. ¿Está bien?Si (2) no es cierto, ¿en qué otro tipo de situación deberíamos usar "ON UPDATE CASCADE"?
¿Qué pasa si yo (por alguna razón) actualizo el
child.parent_id
como algo que no existe, ¿se eliminará automáticamente?
Bueno, lo sé, algunos de la pregunta anterior puede estar la prueba programmically de entender pero quiero también saber si algo de esto es proveedor de base de datos dependiente o no.
Por favor, arroja algo de luz.
Ver también: http://stackoverflow.com/questions/6894162/postgresql-how-to-compact-renumber-id-for-all-tables-and-reset-sequences-to-max –