.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "SET CONSTRAINTS" "" "2003-08-02" "SQL - 言語" "SQL コマンド"
.SH NAME
SET CONSTRAINTS \- 現在のトランザクションの制約モードを設定
.SH SYNOPSIS
.sp
.nf
SET CONSTRAINTS { ALL | \fIconstraint\fR [, ...] } { DEFERRED | IMMEDIATE }
  
.sp
.fi
.SH "説明"
.PP
\fBSET CONSTRAINTS\fRは、現在のトランザクションにおける制約の評価方法を設定します。\fBIMMEDIATE\fR モードでは、一つの文の実行が終わる毎に制約がチェックされます。\fBDEFERRED\fR モードでは、トランザクションが終了するまで制約はチェックされません。
.sp
.RS
.B "Note:"
このコマンドは、現行トランザクション内での制約の振る舞いを変更するだけです。 このようにすると、このコマンドを明示的なトランザクションブロック (例えば \fBBEGIN\fR で始まるブロック) の外側で実行する場合に、何も影響がないように見えます。 トランザクション毎に \fBSET CONSTRAINTS\fR コマンドを発行せずに制約を変更したい場合には、制約を作成する際に \fBINITIALLY DEFERRED\fR または \fBINITIALLY IMMEDIATE\fR を指定します。
.RE
.sp
.PP
制約のモードを \fBIMMEDIATE \fR に変更した場合は、新しい制約モードが遡及的に有効になります。 つまり (\fBDEFERRED\fR を使用している場合には） トランザクションの終了時にチェックされることになる未チェックのデータ変更が、代わりに \fBSET CONSTRAINTS\fR コマンドの実行中にチェックされます。
.PP
制約はその生成時において、常に\fBINITIALLY DEFERRED\fR、\fBINITIALLY IMMEDIATE DEFERRABLE\fR、\fBINITIALLY IMMEDIATE NOT DEFERRABLE\fRの三つのうちのいずれかの特徴を持ちます。三番目のものは、\fBSET CONSTRAINTS\fRコマンドで有効になりません。
.PP
今のところ、外部キーの制約だけがこの設定の影響を受けます。CHECK 制約や UNIQUE 制約は、常に初期状態で直接評価され、遅延されません (常に\fBINITIALLY IMMEDIATE NOT DEFERRABLE\fR)。
.SH "互換性"
.SS "SQL92, SQL99"
.PP
\fBSET CONSTRAINTS\fR は SQL92 と SQL99 で定義されています。 PostgreSQL での実装は、PostgreSQL の制限により \fBSET CONSTRAINTS\fR を check 制約および unique 制約に適用することができない点を除き標準の定義に準拠しています。
