Partager via


DÉBUT DE TRANSACTION

S’applique à :case cochée oui Databricks SQL

Commence une nouvelle transaction interactive qui regroupe plusieurs instructions SQL dans une unité de travail unique qui peut être validée ou restaurée.

En guise d’alternative aux transactions interactives, vous pouvez définir des transactions non interactives à l’aide de la BEGIN ATOMIC ... END; syntaxe. Voir l’instruction composée ATOMIC.

Syntaxe

BEGIN { TRANSACTION | WORK }

Paramètres

Cette instruction n’a aucun paramètre.

Remarques

  • Si une transaction interactive est déjà active, exécuter BEGIN TRANSACTION à nouveau entraîne une erreur TRANSACTION_NOT_SUPPORTED.NESTED_TRANSACTION. Les transactions interactives ne prennent pas en charge l’imbrication.
  • BEGIN TRANSACTION et BEGIN WORK sont des alternatives de syntaxe équivalentes.

Exemples

Les exemples suivants illustrent des modèles de transaction interactifs courants.

Transaction de base entre tables

Exécutez chaque instruction séparément.

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;

Lecture de ses propres écritures

Exécutez chaque instruction séparément.

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;

Transaction avec annulation

Exécutez chaque instruction séparément.

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;

Visibilité des modifications non validées

Dans cet exemple, les modifications dans une transaction ne sont pas visibles par d’autres sessions tant que la transaction n’est pas validée. Exécutez chaque instruction séparément.

Session 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

Session 2 (simultanée) :

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

Session 1 (suite) :

-- Now commit the transaction
COMMIT TRANSACTION;

Session 2 (après validation) :

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

Visibilité des modifications simultanées

Dans cet exemple, les modifications simultanées apportées en dehors de la transaction ne sont pas visibles par la transaction. Azure Databricks capture un instantané cohérent de chaque table au premier accès, et toutes les lectures suivantes de cette table utilisent cet instantané (lecture reproductible). Exécutez chaque instruction séparément.

Session 1 (démarrer une transaction et lire la table) :

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

Session 2 (session simultanée ajoute une ligne) :

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

Session 1 (suite, réécrit le tableau) :

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

Cela garantit des lectures cohérentes tout au long de la transaction, quelles que soient les modifications simultanées.