BEGIN

Startet eine Transaktion in der aktuellen Sitzung.

START TRANSACTION ist ein Synonym für BEGIN.

Siehe auch:

COMMIT, ROLLBACK, SHOW TRANSACTIONS, DESCRIBE TRANSACTION

Syntax

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

START TRANSACTION [ NAME <name> ]
Copy

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. Die Transaktions-ID ist eine vorzeichenbehaftete 64-Bit (lange) Ganzzahl. Der Wertebereich ist -9.223.372.036.854.775.808 (-2 63) bis 9.223.372.036.854.775.807 (2 63 – 1).

  • 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, erfolgt die Abfrage des Streams an der Streamspitze (d. h. dem Zeitstempel), 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.

  • Wenn zwei BEGIN-Anweisungen hintereinander ausgeführt werden (innerhalb desselben Geltungsbereichs), wird die zweite ignoriert. Im folgenden Code haben z. B. die zweite und dritte BEGIN-Anweisung keine Wirkung. Die bestehende offene Transaktion wird fortgesetzt.

    begin;
    begin;    -- Ignored!
    insert into table1 ...;
    begin;    -- Ignored!
    insert into table2 ...;
    commit;
    
    Copy

    Die Regeln können komplexer sein, wenn Sie autonome Transaktionen und gespeicherte Prozeduren mit Geltungsbereich verwenden.

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

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

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