BEGIN
トランザクションを開始します。START TRANSACTION と同義です。
トランザクションは、1 つのコマンドまたは複数のコマンドから構成される、1 つの論理的作業単位です。通常、1 つのトランザクションのすべてのコマンドはデータベースの 1 つのスナップショットに対して実行されます。その開始時刻は、システム設定パラメータ transaction_snapshot_begin
に設定されている値によって決定されます。
デフォルトでは、個々の Amazon Redshift オペレーション (クエリ、DDL ステートメント、ロード) はデータベースに自動的にコミットされます。後続の作業が完了するまでオペレーションのコミットを停止する場合、BEGIN ステートメントでトランザクションを開き、必要なコマンドを実行し、COMMITまたは END ステートメントでトランザクションを閉じます。必要に応じて、ROLLBACKステートメントを使用して、進行中のトランザクションを停止できます。この動作の例外は TRUNCATE コマンドです。このコマンドは実行されているトランザクションをコミットします。ロールバックすることはできません。
構文
BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ] Where option is SERIALIZABLE | READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster by querying the stv_db_isolation_level table.
パラメータ
- WORK
-
オプションキーワード
- TRANSACTION
-
オプションキーワード。WORK と TRANSACTION は同義語です。
- ISOLATION LEVEL SERIALIZABLE
-
デフォルトで直列化可能な分離がサポートされているため、この構文がステートメントに含まれているかどうかに関係なく、トランザクションの動作は同じです。詳細については、「同時書き込み操作を管理する」を参照してください。他の分離レベルはサポートされていません。
注記
SQL 標準では、以下の状態を避けるため、4 つのレベルのトランザクション分離を定義しています: ダーティリード (トランザクションが未コミットの同時トランザクションによって書き込まれたデータを読み取ります)、非再現リード (トランザクションが以前に読み取ったデータを再読み取りし、初回読み取り後にコミットされた別のトランザクションによってデータが変更されたことを検出します)、およびファントムリード (トランザクションがクエリを再実行し、検索条件を満たす行セットを返した後、最近コミットされた別のトランザクションのために行セットが変更されていることを検出します)。
-
未コミット読み取り: ダーティリード、非再現リード、およびファントムリードの可能性があります。
-
コミット済み読み取り: 非再現リードおよびファントムリードの可能性があります。
-
再現可能読み取り: ファントムリードの可能性があります。
-
直列化可能: ダーティリード、非再現リード、およびファントムリードを防止します。
4 つのトランザクション分離レベルのいずれも使用できますが、Amazon Redshift ではすべての分離レベルを直列化可能として処理します。
-
- READ WRITE
-
トランザクションに読み取り書き込み権限を与えます。
- READ ONLY
-
トランザクションに読み取り専用権限を与えます。
例
次の例では、直列化可能なトランザクションブロックを開始します。
begin;
次の例では、直列化可能分離レベルと読み取り書き込み権限を持つトランザクションブロックを開始します。
begin read write;