Ich habe ein MySql-Schema, das die Vererbung von Klassentabellen verwendet, aber ich möchte, dass die untergeordneten Tabellen von der Elterntabelle und eine Fremdtabelle.
%Vor%Wenn ein Datensatz aus einer der Fremdtabellen gelöscht wird, wird der Datensatz aus der untergeordneten Tabelle, aber nicht aus der übergeordneten Tabelle gelöscht. Ich möchte nicht eine gespeicherte Prozedur / Multi-Anweisung als Lösung verwenden, weil die Fremdtabellen eigene Kaskadenlöschungen haben, also würde ich auch gespeicherte Prozeduren für diese benötigen.
ON DELETE CASCADE
löscht die Zeile in der Tabelle mit dem Fremdschlüssel (untergeordnet), wenn die Zeile in der Tabelle, auf die verwiesen wird (übergeordnet), gelöscht wird. Ohne ON DELETE CASCADE
würde die Zeile mit dem Fremdschlüssel (Kind) auf eine Zeile (Eltern) zeigen, die nicht mehr existiert, und Sie würden INTEGRITY CONSTRAINT VIOLATION
erhalten.
Umgekehrt gibt es kein Problem, das Löschen des untergeordneten Elements ohne Löschen des übergeordneten Elements lässt keine verwaisten Zeilen und für MySQL keine INTEGRITY CONSTRAINT VIOLATION
zu, und es ist keine Kaskade erforderlich.
Wenn Sie die untergeordnete, übergeordnete und die andere referenzierte Zeile zusammen löschen möchten, haben Sie einige Optionen.
Multistatement / Verfahren :
ON DELETE CASCADE
s) ON DELETE CASCADE
s) ON DELETE CASCADE
für die übergeordnete Referenz) ON DELETE CASCADE
für die andere Referenz) Auslöser :
AFTER DELETE
in der Child-Tabelle, die den übergeordneten und den anderen Datensatz löscht (in beliebiger Reihenfolge), dann löscht das Kind alle drei Datensätze (keine Notwendigkeit für ON DELETE CASCADE
s) Ändern Sie die Beziehung:
ON DELETE CASCADE
s bei Zeile löscht das Kind und dann die andere Aufzeichnung der Reihe nach. Tags und Links mysql schema sql-delete cascade