Compartilhar via


Instrução ATOMIC composta

Aplica-se a:marcado como sim Databricks SQL marcado como sim Databricks Runtime 18.0 e superior

Implementa um bloco de Script SQL que pode conter uma sequência de instruções SQL, instruções de controle de fluxo, declarações de variáveis locais e manipuladores de exceção. Quando marcado como ATOMIC, o bloco é executado como uma unidade transacional em que todas as instruções são bem-sucedidas juntas ou falham juntas.

Sintaxe

BEGIN ATOMIC
  statement1;
  statement2;
  ...
END;

Parâmetros

Nenhum. A ATOMIC palavra-chave altera o comportamento da declaração composta.

Descrição

Marca a declaração composta como um bloco de transação atômica. Todas as instruções dentro do bloco são executadas como uma única unidade transacional — ou todas as instruções são bem-sucedidas juntas, ou todas as alterações são revertidas se alguma instrução falhar. O Azure Databricks confirma automaticamente as alterações quando o bloco é concluído com êxito ou reverte todas as alterações se alguma instrução falhar.

BEGIN ATOMIC ... END os blocos podem ser aninhados em outros blocos atômicos. O bloco interno é mesclado na transação externa— todas as instruções são executadas como parte de uma única transação maior. Essa não é uma transação aninhada. Um bloco atômico não pode conter um bloco não atômico BEGIN ... END .

Essa é uma transação não interativa — você não precisa executar COMMIT ou ROLLBACK manualmente.

Requisitos

  • Todas as tabelas gravadas em uma transação de várias instruções e várias tabelas devem:
  • Use um sql warehouse, computação sem servidor ou um cluster executando o Databricks Runtime 18.0 e superior.
  • Você deve ter permissões apropriadas em objetos modificados dentro da transação. Os privilégios são verificados quando cada instrução é executada.

Exemplos

Os exemplos a seguir demonstram padrões comuns de transação usando BEGIN ATOMIC ... END;.

Coordenar atualizações em várias tabelas

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;

Validar dados antes de confirmar

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: Iniciar uma transação interativa com controle manual de confirmação/reversão
  • COMMIT: Confirmar uma transação interativa
  • ROLLBACK: Reverter uma transação interativa
  • Instrução composta: BEGIN ... END blocos sem a ATOMIC palavra-chave
  • Transações: visão geral do suporte à transação
  • Modos de transação: padrões e exemplos detalhados para transações não interativas e interativas