Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks SQL
Databricks Runtime 18.0 och senare
Implementerar ett SQL-skriptblock som kan innehålla en sekvens med SQL-instruktioner, flödeskontrollinstruktioner, lokala variabeldeklarationer och undantagshanterare. När det markeras som ATOMIC körs blocket som en transaktionsenhet där alla satser lyckas tillsammans eller misslyckas tillsammans.
Syntax
BEGIN ATOMIC
statement1;
statement2;
...
END;
Parameters
Ingen. Nyckelordet ATOMIC ändrar beteendet för sammansatta uttryck .
Beskrivning
Markerar den sammansatta instruktionen som ett atomiskt transaktionsblock. Alla instruktioner i blocket körs som en enda transaktionsenhet – antingen lyckas alla instruktioner tillsammans eller så återställs alla ändringar om någon instruktion misslyckas. Azure Databricks begår automatiskt ändringar när blocket har slutförts framgångsrikt, eller återställer alla ändringar om något uttalande misslyckas.
BEGIN ATOMIC ... END block kan vara inkapslade inom andra atomiska block. Det inre blocket förs samman med den yttre transaktionen, och alla satser körs som del av en enda, större transaktion. Det här är inte en kapslad transaktion. Ett atomiskt block får inte innehålla ett icke-atomiskt BEGIN ... END block.
Det här är en icke-interaktiv transaktion – du behöver inte köra COMMIT eller ROLLBACK manuellt.
Requirements
- Alla tabeller som skrivs till i en transaktion som omfattar flera uttalanden och tabeller måste:
- Hanteras av Unity Catalog: hanterade tabeller (Delta eller Iceberg)
- Ha kataloghanterade incheckningar aktiverade
- Använd ett SQL-lager, serverlös beräkning eller ett kluster som kör Databricks Runtime 18.0 och senare.
- Du måste ha rätt behörighet för objekt som ändrats i transaktionen. Behörigheter kontrolleras när varje kommando körs.
Exempel
Följande exempel visar vanliga transaktionsmönster med hjälp av BEGIN ATOMIC ... END;.
Samordna uppdateringar i flera tabeller
BEGIN ATOMIC
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;
Verifiera data innan du gör förändringar
BEGIN ATOMIC
INSERT INTO staging_customers
SELECT * FROM external_source WHERE ingest_date = current_date();
IF (SELECT COUNT(*) FROM staging_customers WHERE email NOT LIKE '%@%') > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email addresses found';
END IF;
MERGE INTO customers AS target
USING staging_customers AS source
ON target.customer_id = source.customer_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
END;
Relaterade artiklar
- BÖRJA TRANSAKTION: Starta en interaktiv transaktion med manuell inchecknings-/återställningskontroll
- COMMIT: Genomför en interaktiv transaktion
- RULLA TILLBAKA: Rulla tillbaka en interaktiv transaktion
-
Sammansatt sats:
BEGIN ... ENDblocken utan nyckelordetATOMIC - Transaktioner: Översikt över transaktionsstöd
- Transaktionslägen: Detaljerade mönster och exempel för icke-interaktiva och interaktiva transaktioner