現在のトランザクションの制約チェックモードを設定します。
構文
SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }
説明
SET CONSTRAINTS
コマンドは、現在のトランザクションの制約チェック動作を設定します。 IMMEDIATE
制約は、各文の最後にチェックされます。 DEFERRED
制約は、トランザクションがコミットされた後にのみチェックされます。 各制約には独自の IMMEDIATE
または DEFERRED
モードがあります。
制約が作成されると、DEFERRABLE INITIALLY DEFERRED
、DEFERRABLE INITIALLY IMMEDIATE
、または NOT DEFERRABLE
のいずれかの特性が制約に割り当てられます。 3 番目のクラスは常に IMMEDIATE
で、これは SET CONSTRAINTS
コマンドの影響を受けません。 最初の 2 つのクラスは、指定されたモードで各トランザクションを開始します。 トランザクションの最初の 2 つのクラスの動作を変更する場合、SET CONSTRAINTS
コマンドを使用します。
制約名リストを指定すると、 SET CONSTRAINTS
コマンドは、指定された制約モードを変更します。 指定された制約は延期可能である必要があります。 指定された名前と一致する制約が複数ある場合、一致するすべての制約モードが変更されます。
SET CONSTRAINTS ALL
コマンドは、すべての延期可能な制約モードを変更します。
SET
CONSTRAINTS
コマンドが制約モードを DEFERRED
から IMMEDIATE
に変更すると、新しいモードには遡及効果ができます。 SET
CONSTRAINTS
コマンドの実行中、未完了のデータ変更は全てチェックされます。 トランザクションの終了時には、これらのデータ変更はそれ以上チェックされなくなります。 制約に違反すると、
SET CONSTRAINTS
コマンドは失敗し、制約モードは変更されません。 したがって、SET CONSTRAINTS
コマンドを使用して、トランザクションの特定のポイントで制約を強制的にチェックすることができます。
制約チェックモードの設定は、外部キー制約にのみ有効です。 Check および UNIQUE 制約の延期は不可能です。