Ich verwende "ON DELETE CASCADE" regelmäßig, aber ich verwende nie "ON UPDATE CASCADE", da ich nicht sicher bin, in welcher Situation es nützlich sein wird.Wann "ON UPDATE CASCADE" zu verwenden ist
Für die Diskussion lassen Sie einige Code sehen.
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
);
Für „ON DELETE CASCADE“, wenn ein Elternteil mit einem id
gelöscht wird, wird ein Datensatz in Kind mit parent_id = parent.id
automatisch gelöscht. Dies sollte kein Problem sein.
Das bedeutet, dass „ON UPDATE CASCADE“ wird das gleiche tun, wenn
id
des Mutter aktualisiert wird?Wenn (1) wahr ist, bedeutet dies, dass es keine Notwendigkeit „ON UPDATE CASCADE“ zu verwenden ist, wenn
parent.id
nicht aktualisierbar ist (oder wird nie aktualisiert werden), wie wenn esAUTO_INCREMENT
ist oder immerTIMESTAMP
gesetzt werden. Ist das richtig?Wenn (2) nicht wahr ist, in welcher anderen Situation sollten wir "ON UPDATE CASCADE" verwenden?
Was passiert, wenn ich (aus irgendeinem Grund) die
child.parent_id
aktualisieren, um etwas nicht vorhanden zu sein, wird es dann automatisch gelöscht werden?
Nun, ich weiß, über einen Teil der Frage kann programmically sein Test zu verstehen, aber ich möchte auch wissen, ob jede dieser Datenbank-Anbieter abhängig ist oder nicht.
Bitte werfen Sie etwas Licht.
Siehe auch: http://stackoverflow.com/questions/6894162/postgresql-how-to-compact-renumber-id-for-all-tables-and-reset-sequences-to-max –