Kategorien:

Transaktionen

BEGIN

Startet eine Transaktion in der aktuellen Sitzung.

START TRANSACTION ist ein Synonym für BEGIN.

Siehe auch:

COMMIT , ROLLBACK , SHOW TRANSACTIONS

Syntax

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

START TRANSACTION [ NAME <name> ]

Parameter

WORK | TRANSACTION

Optionale Schlüsselwörter, die die Kompatibilität mit anderen Datenbanksystemen gewährleisten.

NAME Name

Optionale Zeichenfolge, die der Transaktion einen Namen zuweist. Ein Name hilft bei der Identifizierung einer Transaktion, ist aber nicht erforderlich und muss nicht eindeutig sein.

Nutzungshinweise

  • Alle Transaktionen haben eine vom System generierte interne ID, der der Zeitstempel (in Millisekunden) beim Start der Transaktion ist.

  • Wenn Sie einen Namen für eine Transaktion angeben, ist das Schlüsselwort NAME erforderlich.

  • Wenn kein Name angegeben wird, wird der Transaktion ein vom System generierter Name zugewiesen.

  • Um eine Transaktion abzuschließen, muss ein Befehl COMMIT oder ROLLBACK explizit ausgeführt werden. Bis zur Ausführung eines dieser Befehle bleibt die Transaktion offen.

  • Wenn eine SQL-Anweisung einen Stream innerhalb einer expliziten Transaktion abfragt, wird der Stream an der Streamspitze (d. h. dem Zeitstempel) abgefragt, als die Transaktion begann und nicht als die Anweisung ausgeführt wurde. Dieses Verhalten betrifft sowohl DML-Anweisungen als auch CREATE TABLE … AS SELECT (CTAS)-Anweisungen, die eine neue Tabelle mit Zeilen aus einem vorhandenen Stream füllen.

Beispiele

Bemerkung

Diese Beispiele enthalten nicht die notwendigen Befehle zum Abschließen der Transaktionen. Beispiele für vollständige Transaktionen finden Sie unter COMMIT oder ROLLBACK.

Starten Sie eine Transaktion:

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

Notieren Sie sich den vom System zugewiesenen Namen 56cb9163-77a3-4223-b3e0-aa24a20540a3 für die Transaktion.

Beginnt eine Transaktion mit einem bestimmten Namen:

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

Wie im vorherigen Beispiel, aber mit START TRANSACTION anstelle von BEGIN:

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

In allen drei Beispielen ist zu beachten, dass die Funktion CURRENT_TRANSACTION die Transaktion ID zurückgibt (d. h. die Startzeit der Transaktion in Millisekunden).

Alle Funktionen, die auf der ID/dem Zeitstempel ausgeführt werden, müssen die entsprechende Skala angeben. Beispiel:

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