Freigeben über


TRANSAKTION BEGINNEN

Gilt für:Grünes Häkchen für „Ja“ Databricks SQL

Beginnt eine neue interaktive Transaktion, die mehrere SQL-Anweisungen in einer einzigen Arbeitseinheit gruppiert, die zugesichert oder zurückgesetzt werden kann.

Als Alternative zu interaktiven Transaktionen können Sie nicht interaktive Transaktionen mithilfe der BEGIN ATOMIC ... END; Syntax definieren. Siehe ATOMIC-Verbundanweisung.

Syntax

BEGIN { TRANSACTION | WORK }

Parameter

Diese Anweisung hat keine Parameter.

Hinweise

  • Wenn eine interaktive Transaktion bereits aktiv ist, führt die Ausführung BEGIN TRANSACTION erneut zu einem TRANSACTION_NOT_SUPPORTED.NESTED_TRANSACTION Fehler. Interaktive Transaktionen unterstützen keine Schachtelung.
  • BEGIN TRANSACTION und BEGIN WORK sind gleichwertige Syntaxalternativen.

Beispiele

Die folgenden Beispiele veranschaulichen allgemeine interaktive Transaktionsmuster.

Grundlegende tabellenübergreifende Transaktion

Führen Sie jede Anweisung separat aus.

BEGIN TRANSACTION;
-- Insert a new record
INSERT INTO my_table VALUES (1, 'test');
-- Update records in another table
UPDATE another_table
SET value = 'updated'
WHERE id = 5;
-- Commit all changes in both tables atomically
COMMIT TRANSACTION;

Lies-eigene-Schreibvorgänge

Führen Sie jede Anweisung separat aus.

BEGIN TRANSACTION;
-- Insert new data
INSERT INTO customers VALUES (101, 'New Customer');
-- Query can see the inserted data within the same transaction
SELECT * FROM customers WHERE id = 101;
-- Returns the newly inserted row even though it's not yet committed
-- Update the newly inserted data
UPDATE customers SET name = 'Updated Customer Name' WHERE id = 101;
-- Query sees the updated value
SELECT name FROM customers WHERE id = 101;
-- Returns 'Updated Customer Name'
-- Commit makes changes visible to other transactions
COMMIT TRANSACTION;

Transaktion mit Rollback

Führen Sie jede Anweisung separat aus.

BEGIN TRANSACTION;
-- Attempt an insert operation
INSERT INTO my_table VALUES (1, 'incorrect-value');
-- After discovering the mistake, rollback the transaction
-- (no changes are actually made to the tables)
ROLLBACK TRANSACTION;

Sichtbarkeit nicht abgeschlossener Änderungen

In diesem Beispiel sind Änderungen innerhalb einer Transaktion erst dann für andere Sitzungen sichtbar, wenn die Transaktion zugesichert wurde. Führen Sie jede Anweisung separat aus.

Sitzung 1:

BEGIN TRANSACTION;
-- Insert new data
INSERT INTO products VALUES (999, 'New Product', 29.99);
-- At this point, Session 2 cannot see this data
-- You can see your own changes
SELECT * FROM products WHERE id = 999;
-- Returns the new product

Sitzung 2 (gleichzeitig):

-- This query does not see the uncommitted data from Session 1
SELECT * FROM products WHERE id = 999;
-- Returns no rows

Sitzung 1 (fortgesetzt):

-- Now commit the transaction
COMMIT TRANSACTION;

Sitzung 2 (nach commit):

-- Now the query can see the committed data
SELECT * FROM products WHERE id = 999;
-- Returns the new product

Sichtbarkeit gleichzeitiger Änderungen

In diesem Beispiel sind gleichzeitige Änderungen, die außerhalb der Transaktion vorgenommen wurden, für die Transaktion nicht sichtbar. Azure Databricks erfasst eine konsistente Momentaufnahme jeder Tabelle beim ersten Zugriff, und alle nachfolgenden Lesevorgänge dieser Tabelle verwenden diese Momentaufnahme (wiederholbares Lesen). Führen Sie jede Anweisung separat aus.

Sitzung 1 (Starten einer Transaktion und Lesen der Tabelle):

BEGIN TRANSACTION;
-- Read the table; captures a snapshot of orders at this point
SELECT COUNT(*) FROM orders;
-- Returns: 1

Sitzung 2 (gleichzeitige Sitzung fügt eine Zeile hinzu):

INSERT INTO orders VALUES (2, 'Product B', 75.00);
COMMIT;

Sitzung 1 (fortgesetzt, Tabelle erneut lesen):

-- Still reads from the original snapshot; the new row is not visible
SELECT COUNT(*) FROM orders;
-- Returns: 1 (unchanged, even though Session 2 committed a new row)
COMMIT;

Dies garantiert konsistente Lesevorgänge während der gesamten Transaktion, unabhängig von gleichzeitigen Änderungen.