Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Databricks SQL
Begint een nieuwe interactieve transactie die meerdere SQL-instructies in één werkeenheid groeperen die kan worden doorgevoerd of teruggedraaid.
Als alternatief voor interactieve transacties kunt u niet-interactieve transacties definiëren met behulp van de BEGIN ATOMIC ... END; syntaxis. Zie de atomische samengestelde uitdrukking.
Syntaxis
BEGIN { TRANSACTION | WORK }
Parameterwaarden
Deze uitspraak heeft geen parameters.
Aantekeningen
- Als een interactieve transactie al actief is, resulteert het uitvoeren van
BEGIN TRANSACTIONopnieuw in een TRANSACTION_NOT_SUPPORTED.NESTED_TRANSACTION fout. Interactieve transacties bieden geen ondersteuning voor nesten. -
BEGIN TRANSACTIONenBEGIN WORKequivalente syntaxisalternatieven zijn.
Examples
In de volgende voorbeelden ziet u veelvoorkomende interactieve transactiepatronen.
Eenvoudige transactie tussen tabellen
Voer elke instructie afzonderlijk uit.
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;
Lees je eigen schrijfhandelingen
Voer elke instructie afzonderlijk uit.
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;
Transactie met terugdraaien
Voer elke instructie afzonderlijk uit.
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;
Zichtbaarheid van niet-doorgevoerde wijzigingen
In dit voorbeeld zijn wijzigingen binnen een transactie pas zichtbaar voor andere sessies als de transactie is doorgevoerd. Voer elke instructie afzonderlijk uit.
Sessie 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
Sessie 2 (gelijktijdig):
-- This query does not see the uncommitted data from Session 1
SELECT * FROM products WHERE id = 999;
-- Returns no rows
Sessie 1 (vervolg):
-- Now commit the transaction
COMMIT TRANSACTION;
Sessie 2 (na doorvoeren):
-- Now the query can see the committed data
SELECT * FROM products WHERE id = 999;
-- Returns the new product
Zichtbaarheid van gelijktijdige wijzigingen
In dit voorbeeld zijn gelijktijdige wijzigingen die buiten de transactie zijn aangebracht, niet zichtbaar voor de transactie. Azure Databricks legt een consistente momentopname vast van elke tabel bij eerste toegang en alle volgende leesbewerkingen van die tabel maken gebruik van deze momentopname (herhaalbaar lezen). Voer elke instructie afzonderlijk uit.
Sessie 1 (start een transactie en lees de tabel):
BEGIN TRANSACTION;
-- Read the table; captures a snapshot of orders at this point
SELECT COUNT(*) FROM orders;
-- Returns: 1
Sessie 2 (gelijktijdige sessie voegt een rij toe):
INSERT INTO orders VALUES (2, 'Product B', 75.00);
COMMIT;
Sessie 1 (voortgezet, de tabel opnieuw lezen):
-- 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;
Dit garandeert consistente leesbewerkingen gedurende de transactie, ongeacht gelijktijdige wijzigingen.
Verwante artikelen
- ATOMIC-samengestelde instructie (niet-interactieve transacties): meerdere SQL-instructies uitvoeren als één atomische transactie met automatische doorvoer en terugdraaien
- DOORVOEREN: Een interactieve transactie doorvoeren en alle wijzigingen permanent aanbrengen
- TERUGDRAAIEN: Een interactieve transactie terugdraaien en alle wijzigingen negeren
- Transacties: Overzicht van transactieondersteuning, vereisten en beperkingen
- Transactiemodi: Gedetailleerde patronen en voorbeelden voor niet-interactieve en interactieve transacties
-
BEGIN END gecombineerde verklaring:
BEGIN ... ENDblokken zonder hetATOMICtrefwoord