.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "BEGIN" "" "2003-08-02" "SQL - 言語" "SQL コマンド"
.SH NAME
BEGIN \- トランザクションブロックの開始
.SH SYNOPSIS
.sp
.nf
BEGIN [ WORK | TRANSACTION ]
  
.sp
.fi
.SS "入力"
.PP
.TP
\fBWORK\fR
.TP
\fBTRANSACTION\fR
省略可能なキーワード。これらは何も効果がありません。
.PP
.SS "出力"
.PP
.TP
\fBBEGIN\fR
新しいトランザクションが始まったことを表します。
.TP
\fBWARNING: BEGIN:already a transaction in progress\fR
トランザクションがすでに進行中であることを示します。現在のトランザクションには影響を与えません。
.PP
.SH "説明"
.PP
デフォルトでは、PostgreSQL はトランザクションを \fI非連鎖モード\fR（他のデータベースシステムでは ``自動コミット'' としても知られています）で実行します。言い換えると、それぞれのユーザの文はそれ固有のトランザクションの中で実行され、コミットはその文の終わりに暗黙的に実行されます（実行が成功した場合です。 そうでない場合はロールバックされます）。 \fBBEGIN\fR はユーザのトランザクションを連鎖モードで開始します。すなわち、\fBBEGIN\fR コマンド以降のすべてのユーザの文は、明示的な    COMMIT   [\fBcommit\fR(l)]、もしくは    ROLLBACK   [\fBrollback\fR(l)] が実行されるまで、単一のトランザクションにおいて実行されます。 連鎖モードにおける文はより迅速に実行されます。なぜなら、トランザクションの開始/コミットには、CPU とディスクにかなり高い負荷がかかるからです。トランザクション中の複数の文の実行はまた、複数の関連するテーブルを更新するときに確実に一貫性を保つためにも便利です。関連する更新がすべて完了していない中間的な状態を、他のクライアントからは参照できません。
.PP
PostgreSQL におけるデフォルトのトランザクション隔離レベルは、トランザクション内の各問い合わせが、その問い合わせの実行開始前にコミットされた変更を参照できる、READ COMMITTED です。したがって、より厳密なトランザクションの隔離を必要とするならば、\fBBEGIN\fR のすぐ後に \fBSET TRANSACTION ISOLATION LEVEL SERIALIZABLE\fR を使わなければなりません。 (もしくは、トランザクション隔離レベルのデフォルトを変更することができます。詳細は、\fIPostgreSQL 管理者用ガイド\fRを参照してください。) SERIALIZABLE モードでは、問い合わせはトランザクション全体が開始される以前にコミットされた変更のみを参照します (実際には、そのトランザクション中の最初の DML 文の実行以前です)。
.PP
トランザクションには、標準の ACID 性 （Atomic：原子性、Consistent：一貫性、Isolatable：隔離性、Durable：耐久性、の頭文字） があります。
.SS "注釈"
.PP
START TRANSACTION [\fBstart_transaction\fR(l)] には、\fBBEGIN\fR と同じような機能があります。
.PP
トランザクションを終了させるには    COMMIT   [\fBcommit\fR(l)] か    ROLLBACK   [\fBrollback\fR(l)] を使用して 下さい。
.PP
トランザクション内におけるテーブルのロックについてのより詳細は LOCK [\fBlock\fR(l)]を参照してください。
.PP
autocommit モードをオフにした場合、\fBBEGIN\fR は不要です。 SQL コマンドであればすべて、実行すると自動的にトランザクションを開始します。
.SH "使用方法"
.PP
ユーザトランザクションを始めるためには下記のようにします。
.sp
.nf
BEGIN WORK;
  
.sp
.fi
.SH "互換性"
.SS "SQL92"
.PP
\fBBEGIN\fR は PostgreSQL の言語拡張です。SQL92 には明示的な \fBBEGIN\fR コマンドはありません。 トランザクションの開始は常に暗黙的で、\fBCOMMIT\fR または \fBROLLBACK\fR 文で終了します。
.sp
.RS
.B "Note:"
利便性のために、多くのリレーショナルデータベースシステムは、自動コミット機能を提供しています。
.RE
.sp
.PP
BEGIN というキーワードは埋め込み SQL では異なった目的に使われます。データベースアプリケーションを移植するときはトランザクションの意味で使用されているのかどうか注意するべきでしょう。
.PP
SQL92 では、SEREALIZABLE がデフォルトのトランザクション隔離レベルであることを要求しています。
