カテゴリ:

トランザクション

BEGIN

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

START TRANSACTION は BEGIN の同義語です。

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

COMMITROLLBACKSHOW TRANSACTIONS

構文

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

START TRANSACTION [ NAME <name> ]

パラメーター

WORK | TRANSACTION

他のデータベースシステムとの互換性を提供するオプションのキーワード。

NAME 名前

トランザクションに名前を割り当てるオプションの文字列。名前はトランザクションの識別に役立ちますが、必須ではなく、一意である必要もありません。

使用上の注意

  • すべてのトランザクションには、システムが生成した内部 ID があります。これは、トランザクションが開始されたときのタイムスタンプ(ミリ秒単位)です。

  • トランザクションの名前を指定する場合、 NAME キーワードが必要です。

  • 名前が指定されていない場合、システム生成の名前がトランザクションに割り当てられます。

  • トランザクションを完了するには、COMMIT または ROLLBACK コマンドを明示的に実行する必要があります。これらのコマンドのいずれかが実行されるまで、トランザクションは未処理の状態のままです。

  • When a SQL statement queries a stream within an explicit transaction, the stream is queried at the stream advance point (i.e. the timestamp) when the transaction began rather than when the statement was run. This behavior pertains both to DML statements and CREATE TABLE ... AS SELECT (CTAS) statements that populate a new table with rows from an existing stream.

注釈

これらの例には、トランザクションを完了するために必要なコマンドは含まれていません。完全なトランザクションの例については、 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         |
+-----------------------+

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

3つの例すべてで、 CURRENT_TRANSACTION 関数はトランザクション ID (つまり、ミリ秒単位のトランザクションの開始時間)を返すことに注意してください。

ID/タイムスタンプで実行される関数は、適切なスケールを指定する必要があります。例:

SELECT CURRENT_TRANSACTION();

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042467963         |
+-----------------------+

SELECT TO_TIMESTAMP_LTZ(1530042467963, 3) AS transaction_timestamp;

+-------------------------------+
| TRANSACTION_TIMESTAMP         |
|-------------------------------|
| 2018-06-26 12:47:47.963 -0700 |
+-------------------------------+