Descrever 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 declaraçõ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, nenhuma conclusão parcial é permitida. 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 uma empresa 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 registar o pagamento na tabela, a inserção do pedido 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 notar 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 revisar as unidades subsequentes neste módulo para entender completamente as implicações do uso de transações.

Existem diferentes tipos de transações:

Transações explícitas

As palavras-chave BEGIN TRANSACTION e COMMIT ou ROLLBACK iniciam e terminam cada conjunto 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 é concluída. Cada transação é explicitamente concluída com uma instrução COMMIT ou ROLLBACK.

Características ACID

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

  • Atomicidade – cada transação é tratada como uma única unidade, que é bem-sucedida completamente ou falha completamente. Por exemplo, uma transação que envolva debitar fundos de uma conta e creditar o mesmo valor em outra conta deve concluir ambas as ações. Se uma ação 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 o exemplo de débito e crédito acima, o estado concluído da transação deve refletir a transferência de fundos de uma conta para a outra.
  • Isolamento – transações simultâneas não podem interferir umas com as outras e devem resultar em um estado consistente do banco de dados. 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 reflita o saldo antes da transferência e um valor para a outra conta que reflita o saldo após a transferência.
  • Durabilidade – quando uma transação é autorizada, ela permanece comprometida. Após a conclusão da transação de transferência de conta, os saldos de conta revisados são mantidos de modo que, mesmo que o sistema de banco de dados seja desligado, a transação confirmada seja refletida quando for ligada novamente.