BEGIN¶
現在のセッションでトランザクションを開始します。
START TRANSACTION は BEGIN の同義語です。
- こちらもご参照ください。
構文¶
BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]
START TRANSACTION [ NAME <name> ]
パラメーター¶
WORK | TRANSACTION
他のデータベースシステムとの互換性を提供するオプションのキーワード。
NAME name
トランザクションに名前を割り当てるオプションの文字列。名前はトランザクションの識別に役立ちますが、必須ではなく、一意である必要もありません。
使用上の注意¶
すべてのトランザクションには、システムによって生成された内部 ID があります。トランザクション ID は、符号付き64ビット(ロング)整数です。値の範囲は、-9,223,372,036,854,775,808(-2 63)から9,223,372,036,854,775,807(2 63 - 1)です。
トランザクションの名前を指定する場合、
NAME
キーワードが必要です。名前が指定されていない場合、システム生成の名前がトランザクションに割り当てられます。
トランザクションを完了するには、COMMIT または ROLLBACK コマンドを明示的に実行する必要があります。これらのコマンドのいずれかが実行されるまで、トランザクションは未処理の状態のままです。
SQL ステートメントが明示的なトランザクション内でストリームをクエリすると、ストリームはステートメントが実行されたときではなく、トランザクションが開始されたときのストリームアドバンスポイント(つまり、タイムスタンプ)でクエリされます。この動作は、DMLステートメントと、既存のストリームの行を新しいテーブルに取り込むCREATE TABLE ... AS SELECT (CTAS)ステートメントの両方に関係します。
2つの BEGIN ステートメントが連続して実行された場合(同じ スコープ 内)、2番目のステートメントは無視されます。たとえば、次のコードでは、2番目と3番目の BEGINs は効果がありません。既存のオープントランザクションは続行されます。
begin; begin; -- Ignored! insert into table1 ...; begin; -- Ignored! insert into table2 ...; commit;
自律スコープトランザクションとストアドプロシージャ を使用している場合、ルールはより複雑になる可能性があります。
例¶
トランザクションを開始します。
BEGIN; SHOW TRANSACTIONS; +---------------+--------+--------------+--------------------------------------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+--------------------------------------+-------------------------------+---------| | 1530042321085 | USER1 | 223347060798 | 56cb9163-77a3-4223-b3e0-aa24a20540a3 | 2018-06-26 12:45:21.085 -0700 | running | +---------------+--------+--------------+--------------------------------------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION() +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042321085 | +-----------------------+トランザクションにシステムが割り当てた名前
56cb9163-77a3-4223-b3e0-aa24a20540a3
を記録してください。
指定された名前でトランザクションを開始します。
BEGIN NAME T1; SHOW TRANSACTIONS; +---------------+--------+--------------+------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+------+-------------------------------+---------| | 1530042377426 | USER1 | 223347060798 | T1 | 2018-06-26 12:46:17.426 -0700 | running | +---------------+--------+--------------+------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION(); +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042377426 | +-----------------------+
前の例と同じですが、BEGIN の代わりに START TRANSACTION を使用します。
START TRANSACTION NAME T2; SHOW TRANSACTIONS; +---------------+--------+--------------+------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+------+-------------------------------+---------| | 1530042467963 | USER1 | 223347060798 | T2 | 2018-06-26 12:47:47.963 -0700 | running | +---------------+--------+--------------+------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION(); +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042467963 | +-----------------------+