BEGIN はトランザクションブロックを開始します。BEGIN の後に続くすべての文は、明示的な COMMIT または ROLLBACK を発行するまで、単一のトランザクションとして実行されます。
BEGIN を使用しない場合、PolarDB PostgreSQL はオートコミットモードで動作します。このモードでは、各文が個別のトランザクションとして実行され、成功時には自動的にコミットされ、失敗時にはロールバックされます。
トランザクションブロックを使用する理由
文をトランザクションブロックにグループ化すると、以下の 2 つの利点があります:
パフォーマンス: トランザクションの開始およびコミットには、CPU およびディスクへの負荷が大きくかかります。複数の文を 1 つのトランザクションにまとめて実行することで、このオーバーヘッドを削減できます。
整合性: 他のセッションは中間状態を確認できません。コミットが完了するまで、部分的に適用された変更は他の接続からは非表示となります。
分離レベル、読み取り/書き込みモード、または遅延可能モードが指定されている場合、新規トランザクションはその特性を持ち、あたかも SET TRANSACTION を実行したかのように動作します。
概要
BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]
where transaction_mode is one of:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
[ NOT ] DEFERRABLEパラメーター
| パラメーター | 説明 |
|---|---|
WORK | TRANSACTION | 任意のキーワードです。動作に影響はありません。 |
ISOLATION LEVEL | トランザクションの分離レベルを設定します。有効な値: SERIALIZABLE、REPEATABLE READ、READ COMMITTED、READ UNCOMMITTED。 |
READ WRITE | READ ONLY | トランザクションのアクセスモードを設定します。READ ONLY を指定すると、トランザクション内でデータの変更が禁止されます。 |
DEFERRABLE | NOT DEFERRABLE | SERIALIZABLE READ ONLY トランザクションがブロッキングを回避するために遅延可能かどうかを制御します。他のトランザクションタイプには影響しません。 |
各トランザクションモードの詳細については、「SET TRANSACTION」をご参照ください。
注意事項
SET TRANSACTION は、
BEGINと同様の機能を提供します。既存のトランザクションブロック内で
BEGINを発行すると、警告が表示されます。ただし、現在のトランザクションの状態には影響しません。トランザクションブロック内でトランザクションをネストするには、セーブポイントを使用します。「SAVEPOINT」をご参照ください。
下位互換性のため、連続する
transaction_mode値の間にカンマを省略できます。
例
デフォルト設定でトランザクションを開始
BEGIN;分離レベルを設定
BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;読み取り専用トランザクションを開始
BEGIN READ ONLY;分離レベルとアクセスモードを組み合わせる
BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE;