602SQL-Úplná dokumentace Index  

Kdy se kontroluje dodržení integritních omezení?

Server může kontrolovat dodržení integritních omezení a referenční integrity buď na konci příkazu nebo na konci transakce. Kontrola odložená na konec transakce je nezbytná, pokud je v průběhu transakce platnost omezení nejprve porušena a později obnovena. Kontrola provedená bezprostředně po provedení příkazu je výhodná v tom, že nezatěžuje server nutností pamatovat si seznam všech odložených kontrol.

Výjimkou jsou změny v nadřazené tabulce referenční integrity, pro něž se následná akce nebo chyba vyvolává vždy okamžitě.

Další výjimkou jsou integritní omezení UNIQUE, která se kontrolují při každé změně v tabulce okamžitě.

Čas vyhodnocení integritního omezení se předepisuje takto:

vyhodnoceni ::= INITIALLY { IMMEDIATE | DEFERRED }

INITIALLY IMMEDIATE určuje, že se kontrola bude provádět bezprostředně po provedení příkazu. INITIALLY DEFERRED určuje, že se kontrola vnitřního integritního omezení nebo kontrola referenční integrity po změně v podřízené tabulce odloží na konec transakce.

Čas vyhodnocení nelze explicitně nastavit pro vlastnost sloupce NOT NULL - je-li třeba, použijte místo vlastnosti NOT NULL integritní omezení CHECK (sloupec IS NOT NULL), pro nějž lze čas vyhodnocení zadat.

Není-li čas vyhodnocení specifikován, řídí se nastavením příznaku kompatibility SQLOPT_CONSTRS_DEFERRED (16384). To platí i pro vlastnost sloupce NOT NULL.