BEGIN

現在のセッションでトランザクションを開始します。

START TRANSACTION は BEGIN の同義語です。

こちらもご参照ください。

COMMITROLLBACKSHOW TRANSACTIONSDESCRIBE TRANSACTION

構文

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]

START TRANSACTION [ NAME <name> ]
Copy

パラメーター

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;
    
    Copy

    自律スコープトランザクションとストアドプロシージャ を使用している場合、ルールはより複雑になる可能性があります。

注釈

これらの例には、トランザクションを完了するために必要なコマンドは含まれていません。完全なトランザクションの例については、 COMMIT または ROLLBACK をご参照ください。

トランザクションを開始します。

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         |
+-----------------------+
Copy

トランザクションにシステムが割り当てた名前 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         |
+-----------------------+
Copy

前の例と同じですが、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         |
+-----------------------+
Copy