Condividi tramite


Istruzione composta di tipo ATOMIC

Si applica a:spunta sì Databricks SQL spunta sì Databricks Runtime 18.0 e versioni successive

Implementa un blocco di script SQL che può contenere una sequenza di istruzioni SQL, istruzioni control-of-flow, dichiarazioni di variabili locali e gestori di eccezioni. Se contrassegnato come ATOMIC, il blocco viene eseguito come unità transazionale in cui tutte le istruzioni riescono o falliscono insieme.

Sintassi

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parametri

Nessuno. La ATOMIC parola chiave modifica il comportamento dell'istruzione composita.

Descrizione

Contrassegna l'istruzione composta come blocco di transazioni atomiche. Tutte le istruzioni all'interno del blocco vengono eseguite come un'unica unità transazionale: o tutte le istruzioni vanno a buon fine insieme, oppure vengono annullate tutte le modifiche se una qualsiasi istruzione fallisce. Azure Databricks esegue automaticamente il commit delle modifiche quando il blocco viene completato correttamente o annulla tutte le modifiche se una dichiarazione fallisce.

BEGIN ATOMIC ... END i blocchi possono essere annidati all'interno di altri blocchi atomici. Il blocco interno viene integrato nella transazione esterna. Tutte le istruzioni vengono eseguite come parte di una transazione unica e più grande. Non si tratta di una transazione nidificata. Un blocco atomico non può contenere un blocco non atomico BEGIN ... END .

Si tratta di una transazione non interattiva: non è necessario eseguire COMMIT o ROLLBACK manualmente.

Requisiti

  • Tutte le tabelle coinvolte in una transazione multi-istruzione e multi-tabella devono:
  • Usare un'istanza di SQL Warehouse, un ambiente di calcolo serverless o un cluster che utilizza Databricks Runtime 18.0 o versioni successive.
  • È necessario disporre delle autorizzazioni appropriate per gli oggetti modificati all'interno della transazione. I privilegi vengono controllati quando viene eseguita ogni dichiarazione.

Examples

Negli esempi seguenti vengono illustrati i modelli di transazione comuni che usano BEGIN ATOMIC ... END;.

Coordinare gli aggiornamenti tra più tabelle

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;

Convalidare i dati prima del commit

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;
  • BEGIN TRANSACTION: avviare una transazione interattiva con il controllo di commit/rollback manuale
  • COMMIT: eseguire il commit di una transazione interattiva
  • ROLLBACK: Rollback di una transazione interattiva
  • Istruzione composta: BEGIN ... END blocchi che non utilizzano la ATOMIC parola chiave
  • Transazioni: Panoramica del supporto delle transazioni
  • Modalità di transazione: modelli dettagliati ed esempi per transazioni non interattive e interattive