BEGIN はトランザクションブロックを初期化します。 つまり、BEGINコマンドの後の文は全て、明示的な COMMIT または ROLLBACK が与えられるまで、単一のトランザクションの中で実行されます。 デフォルト(BEGIN無し)では、PostgreSQL はトランザクションを "自動コミット" で実行します。 言い換えると、各文はそれ固有のトランザクションの中で実行され、コミットはその文の終わりに暗黙的に実行されます(実行が成功した場合です。 そうでない場合はロールバックされます)。
トランザクションブロック内では、文はより迅速に実行されます。 なぜなら、トランザクションの開始/コミットには、CPU とディスクにかなり高い負荷がかかるからです。 トランザクション中の複数の文の実行はまた、複数の関連するテーブルを更新するときに確実に一貫性を保つためにも便利です。 関連する更新がすべて完了していない中間的な状態を、他のセッションからは参照できません。
START TRANSACTION には、BEGIN と同じような機能があります。
トランザクションを終了させるには COMMIT か ROLLBACK を使用して 下さい。
トランザクションブロック内でBEGIN を発行すると、警告メッセージが現われます。 トランザクションの状態には影響ありません。