Was ist das Standardverhalten von MySQL bei DELETE?


71

Ich versuche, die MySQL- Dokumente zu analysieren . Sie könnten klarer sein. Was sie zu sagen scheinen, ist, dass es fünf Möglichkeiten gibt: SET NULL, NO ACTION, RESTRICT, CASCADE und SET DEFAULT.

NO ACTION und RESTRICT machen dasselbe (verhindern Sie jede DB-Änderung, die einen FK bricht), und dieses Ding ist die Standardeinstellung. Wenn Sie also eine ON DELETE-Klausel weglassen, sagen Sie NO ACTION (oder RESTRICT - dasselbe).

SET NULL ermöglicht das Löschen einer übergeordneten Zeile und setzt den FK auf NULL.

CASCADE löscht die untergeordnete Zeile.

SET DEFAULT sollte einfach niemals verwendet werden.

Ist das mehr oder weniger richtig?


Sie haben die CASCADE-Option verpasst
Jitter

2
Und du hast richtig verstanden. Wenn Sie die Referenzoption für eine FK-Einschränkung in MYSQL nicht angeben, ist dies dasselbe wie ON DELETE RESTRICT
Jitter

4
Nur in MySQL sind NO ACTION und RESTRICT dasselbe. In einer anderen Datenbank, die nicht zutreffend ist, da NO ACTION theoretisch das Löschen / Ändern des referenzierten übergeordneten Elements erlaubt, wenn am Ende der Operation die FK-Einschränkung nicht verletzt wird
Jitter

Antworten:


94

Ja, das ist richtig:

KEINE AKTION : [...] InnoDB lehnt den Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle ab.

EINSCHRÄNKUNG : Lehnt den Lösch- oder Aktualisierungsvorgang für die übergeordnete Tabelle ab. Das Angeben von RESTRICT (oder NO ACTION) entspricht dem Weglassen der Klausel ON DELETE oder ON UPDATE. [...]

Anscheinend NO ACTIONund RESTRICTsind auch. Da sie immer dann verwendet werden, wenn keine ON DELETE / UPDATEKlausel vorhanden ist , ist dies das Standardverhalten.

SET NULL : Löschen oder aktualisieren Sie die Zeile aus der übergeordneten Tabelle und setzen Sie die Fremdschlüsselspalte oder -spalten in der untergeordneten Tabelle auf NULL. [...]

Die Fremdspalte wird auf NULL gesetzt, sofern sie nicht als NICHT NULL deklariert ist (oder InnoDB das Löschen oder Aktualisieren nicht zulässt).

CASCADE : Löschen oder aktualisieren Sie die Zeile aus der übergeordneten Tabelle und löschen oder aktualisieren Sie automatisch die übereinstimmenden Zeilen in der untergeordneten Tabelle. [...]

Cascade löscht (oder aktualisiert) die Fremdspalte.

SET DEFAULT : Diese Aktion wird vom Parser erkannt, InnoDB lehnt jedoch Tabellendefinitionen ab, die die Klauseln ON DELETE SET DEFAULT oder ON UPDATE SET DEFAULT enthalten.

Grundsätzlich können Sie diese Option nicht verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.