Czytałem to o słowie kluczowym SQL DEFERRABLE
w Database Systems - The Complete Book .
To ostatnie [NOT DEFERRABLE] jest wartością domyślną i oznacza, że za każdym razem, gdy wykonywana jest instrukcja modyfikacji bazy danych, ograniczenie jest sprawdzane natychmiast po tym, jeśli modyfikacja mogłaby naruszyć ograniczenie klucza obcego.
Jeśli jednak zadeklarujemy ograniczenie jako ODROCZONE , przed sprawdzeniem ograniczenia mamy możliwość, aby czekało do zakończenia transakcji.
Podążamy za słowem kluczowym ODROCZONE przez POCZĄTKOWO ODROCZONE lub POCZĄTKOWO NATYCHMIASTOWE . W pierwszym przypadku sprawdzanie zostanie odroczone tuż przed zatwierdzeniem każdej transakcji. W tym drugim przypadku czek będzie dokonywany natychmiast po każdym wyciągu.
Czym się NOT DEFERRABLE
różni od DEFERRABLE INITIALLY IMMEDIATE
? W obu przypadkach wydaje się, że wszelkie ograniczenia są sprawdzane po każdym indywidualnym oświadczeniu.
DEFERRABLE
określa zamiar projektanta, że odroczenie ograniczenia jest wartościowym lub koniecznym działaniem. Nie dotyczy to zdecydowanej większości ograniczeń baz danych i oznaczania wszystkiego, coDEFERRABLE
spowodowałoby utratę tego przydatnego rozróżnienia.