Uso regolarmente "ON DELETE CASCADE", ma non utilizzo mai "ON UPDATE CASCADE" in quanto non sono così sicuro in quale situazione sarà utile.
Per motivi di discussione, vediamo un po 'di codice.
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
);
Per "ON DELETE CASCADE", se un genitore con un id
viene eliminato, un record nel figlio con parent_id = parent.id
verrà automaticamente eliminato. Questo non dovrebbe essere un problema.
Ciò significa che "IN AGGIORNAMENTO CASCADE" farà la stessa cosa quando
id
il genitore viene aggiornato?Se (1) è vero, significa che non è necessario utilizzare "AGGIORNAMENTO CASCADE" se
parent.id
non è aggiornabile (o non verrà mai aggiornato) come quando èAUTO_INCREMENT
o è sempre impostatoTIMESTAMP
. È giusto?Se (2) non è vero, in quale altro tipo di situazione dovremmo usare "AGGIORNAMENTO CASCADE"?
Che cosa succede se (per qualche motivo) aggiorno
child.parent_id
per essere qualcosa che non esiste, verrà automaticamente cancellato?
Bene, lo so, alcune delle domande precedenti possono essere testate a livello di codice per capire, ma voglio anche sapere se qualcuno di questi dipende dal fornitore del database o meno.
Per favore, fai luce.