Ich habe dies über das SQL-Schlüsselwort DEFERRABLE
in Database Systems - The Complete Book gelesen .
Letzteres [NOT DEFERRABLE] ist die Standardeinstellung und bedeutet, dass jedes Mal, wenn eine Datenbankänderungsanweisung ausgeführt wird, die Einschränkung unmittelbar danach überprüft wird, ob die Änderung die Fremdschlüsseleinschränkung verletzen könnte.
Wenn wir jedoch eine Einschränkung als DEFERRABLE deklarieren , haben wir die Möglichkeit, sie warten zu lassen, bis eine Transaktion abgeschlossen ist, bevor wir die Einschränkung überprüfen.
Wir folgen dem Schlüsselwort DEFERRABLE entweder INITIALLY DEFERRED oder INITIALLY IMMEDIATE . Im ersteren Fall wird die Überprüfung auf kurz vor jeder Commit-Transaktion verschoben. Im letzteren Fall erfolgt die Prüfung unmittelbar nach jeder Abrechnung.
Wie NOT DEFERRABLE
unterscheidet sich von DEFERRABLE INITIALLY IMMEDIATE
? In beiden Fällen werden anscheinend alle Einschränkungen nach jeder einzelnen Anweisung überprüft.
DEFERRABLE
die Absicht des Designers an, dass das Aufschieben der Einschränkung eine lohnende oder notwendige Maßnahme ist. Dies ist bei der überwiegenden Mehrheit der Datenbankbeschränkungen und Beschriftungen nicht der Fall, daDEFERRABLE
diese nützliche Unterscheidung verloren gehen würde.