Descrever as transações

Concluído

Uma transação é uma ou mais instruções T-SQL que são tratadas como uma unidade. Se uma única transação falhar, todas as instruções falharão. Se uma transação for bem-sucedida, você saberá que todas as instruções de modificação de dados na transação foram bem-sucedidas e confirmadas no banco de dados.

As transações garantem que todas as declarações dentro de uma transação sejam bem-sucedidas ou todas falhem, sem permitir conclusão parcial. As transações encapsulam operações que devem ocorrer logicamente juntas, como várias entradas em tabelas relacionadas que fazem parte de uma única operação.

Considere um negócio que armazena compras em uma tabela Sales.Order e pagamentos em uma tabela Sales.Payment . Quando alguém compra algo, ambas as tabelas devem ser atualizadas. Se isso for implementado sem transações e ocorrer um erro quando o pagamento estiver sendo gravado no banco de dados, a inserção Sales.Order ainda será confirmada, deixando a tabela de pagamento sem uma entrada.

Quando isso é implementado com transações, ambas as entradas são feitas ou nenhuma entrada é feita. Se houver um erro ao gravar o pagamento na tabela, a inserção da ordem também será revertida. Isso significa que o banco de dados está sempre em um estado consistente.

Diagrama mostrando a diferença entre usar transações e não usar transações.

Deve-se observar que isso se refere a erros graves, como erros de hardware ou de rede. Erros em instruções SQL só fariam com que a transação fosse revertida em determinadas circunstâncias e é importante examinar as unidades subsequentes neste módulo para entender completamente as implicações do uso de transações.

Há diferentes tipos de transações:

Transações explícitas

As palavras-chave BEGIN TRANSACTION e COMMIT ou ROLLBACK começam e terminam cada lote de instruções. Isso permite que você especifique quais instruções devem ser confirmadas ou revertidas juntas.

Transações implícitas

Uma transação é iniciada quando a transação anterior foi concluída. Cada transação é explicitamente concluída com uma instrução COMMIT ou ROLLBACK.

Características de ACID

Os sistemas OLTP (Processamento Transacional Online) exigem que as transações atendam às características "ACID":

  • Atomicidade – cada transação é tratada como uma única unidade, que é completamente bem-sucedida ou falha completamente. Por exemplo, uma transação que envolve o débito de fundos de uma conta e o crédito do mesmo valor em outra conta deve concluir ambas as ações. Se uma das ações não puder ser concluída, a outra ação deverá falhar.
  • Consistência – as transações só podem levar os dados no banco de dados de um estado válido para outro. Para continuar com o exemplo de débito e crédito acima, o estado concluído da transação deve refletir na transferência de fundos de uma conta para outra.
  • Isolamento – transações simultâneas não podem interferir entre si e devem resultar em um estado de banco de dados consistente. Por exemplo, enquanto a transação para transferir fundos de uma conta para outra está em processo, outra transação que verifica o saldo dessas contas deve retornar resultados consistentes - a transação de verificação de saldo não pode recuperar um valor para uma conta que reflete o saldo antes da transferência e um valor para a outra conta que reflete o saldo após a transferência.
  • Durabilidade – quando uma transação for confirmada, ela permanecerá confirmada. Depois que a transação de transferência entre contas for concluída, os saldos de conta revisados serão persistidos para que, mesmo que o sistema do banco de dados seja desligado, a transação confirmada seja refletida quando ele for ligado novamente.