BEGIN

Name

BEGIN  --  トランザクションを連鎖モードで開始する

Synopsis

  
BEGIN [ WORK | TRANSACTION ]
  

入力

なし。

出力

BEGIN

これは新しいトランザクションが開始されたことを意味します。

NOTICE: BeginTransactionBlock and not in default state

これはトランザクションがすでに進行中であることを示します。

説明

デフォルトでは、Postgres は トランザクションを非連鎖モード (他のデータベースシステムでは"自動コミット" としても知られています) で実行します。 別の言葉で言えば、それぞれのユーザの文はそれ固有のトランザクション の中で実行され、コミットはその文の終わりに暗黙的に実行されます (実行が成功した場合であり、そうでない場合はロールバックされます)。 BEGIN はユーザのトランザクションを連鎖モードで 開始します。すなわち、BEGIN コマンド以降の 全てのユーザの文は、明示的なCOMMIT、ROLLBACK もしくは実行の アボートまでの単一のトランザクションにおいて実行されます。連鎖 モードにおける文はとても迅速に実行されます。なぜなら トランザクションの開始/コミットはとても大きなCPUとディスクの 活動を必要とするからです。トランザクション中の複数の文の 実行はまた、複数の関連する表を更新する時には一貫性が要求されます。

Postgres におけるデフォルトの トランザクション隔離レベルは、 トランザクション内の問い合わせが問い合わせ実行前にコミット された変更のみが見えるREAD COMMITTED です。 したがって、もしもっと厳しいトランザクションの隔離を必要とする ならば、BEGIN のすぐ後に SET TRANSACTION ISOLATION LEVEL SERIALIZABLE を使わなければなりません。 SERIALIZABLE モードでは、問い合わせはトランザクションの全体が開始 される以前にコミットされた変更のみを参照します (実際には、直列可能なトランザクション中の最初のDML 文の実行以前)。

もしトランザクションがコミットされたら、 Postgres は全ての更新がなされるか、 もしくは更新の全てが無効になることを保証します。 トランザクションには、標準のACID 性 (atomic(原子性), consistent(一貫性), isolatable(独立性), durable(持続性)) があります。

注意事項

キーワード TRANSACTION は、WORK に代替する表面的なものです。 どちらのキーワードも指定する必要はありません。

トランザクション中での表のロックに関する更なる情報は、 LOCK 文を参照。

トランザクションを終了するには、 COMMIT もしくは ROLLBACK を使用すること。

使用法

ユーザトランザクションを開始する:

BEGIN WORK;
  

互換性

BEGIN は、Postgres の言語拡張です。

SQL92

SQL92 には、明示的なBEGIN WORK コマンドはありま せん。トランザクションの開始はいつも暗黙的であり、COMMIT または ROLLBACK 文で終了します。

Note: 多くの関係データベースシステムは、便宜上、自動コミットの機能を 提供します。

SQL92 はまた、SERIALIZABLE をデフォルトの トランザクション隔離レベルとして要求します。