EDUCAÇÃO / TECNOLOGIA / UTILIDADE PÚBLICA

O que são transações e como usar os comandos Begin, Commit e Rollback

Tutorial que mostra passo a passo como funcionam as transações em banco de dados, o processo de confirmação e cancelamento de uma instrução SQL.

Transações são unidades lógicas que ocorrem em operações de banco de dados e são responsáveis por manter a consistência, isolamento, coerência e durabilidade dos dados. Sem as transações corre-se o risco de termos dados inconsistentes o que tornaria duvidoso ou questionável qualquer operação de banco e dados.

[QUEBRA]

Imagine uma transação bancária. Você vai a um caixa eletrônico e faz uma transferência de determinado valor da sua conta para a conta de outra pessoa. Depois de você informar o valor e os dados da conta que irá receber o crédito, pelo menos duas operações importantes serão realizadas no banco:

  • 1º – Debitar o valor da sua conta
  • 2º – Creditar o valor na conta destinatária

Mas, e se entre a operação 1 e 2 houver uma falha e o sistema parar justamente no meio? O valor será debitado e não será creditado, certo? Para evitar esse problema existe as transações.

Uma transação poderá ser implícita ou explicita.

Transação implícita

A transação implícita inicia quando um dos seguintes comandos são executados: Insert, Update, Delete, Create, Drop, Alter, entre outros.

Transação explícita

A transação explicita é iniciada pelo comando Begin transaction e é encerrada por um dos seguintes comandos:

  • Commit. Confirma os dados alterados
  • Rollback. Desfaz os dados alterados.

Exemplos de transações

Primeiro, criaremos uma tabela com a seguinte estrutura:

create table contas(
 numero varchar(50),
 debito decimal(10,2),
 credito decimal(10,2)
)

Exemplo de Rollback

Após criar a tabela, a transação será iniciada e um registro será inserido:

begin transaction
insert into contas values('500-x',80,0)

Feito isso, vou executar três instruções em seguida, sendo um deles o comando Rollback para desfazer o insert.

select * from contas
rollback
select * from contas

O resultado será:

Transações: Exemplo de rollback

Perceba que o primeiro select mostrou que o registro havia sido feito e o segundo select mostrou que o mesmo havia sido desfeito.

Exemplo de Commit

Podemos usar o mesmo exemplo, mas trocando o Rollback pelo Commit. Veja o resultado:

begin transaction
insert into contas values('600-x',110,0)
select * from contas
commit
select * from contas

Transações: Exemplo de Commit

Exemplos condicionais de Commit e Rollback

Os exemplos acimas mostram o uso isolado do Commit e Rollback para confirmar ou desfazer uma operação no banco de dados, mas podemos fazer isso baseado em uma condição. Essa condição poderá ser a existência ou não de erros durante a transação.  O exemplo abaixo explica melhor isso:

select * from contas
begin transaction
insert into contas values('1000-x',500,0)
select * from contas
insert into contas values('2000-x',0,500)
if @@ERROR <> 0
rollback
else
commit
select * from contas

No exmplo acima faço dois inserts, logo após iniciar uma transação e depois verifico se houve erros. Esta verificação de erros está baseada na variável global @@ERROR que sempre retornará 0 se não houve erros.

Veja o resultado abaixo:

Transações: Exemplo de Commit e Rollback

Agora, usando a mesma transação acima, vou inserir um erro na segunda instrução insert. (note que o valor está com virgula e isto causará um erro):

select * from contas
begin transaction
insert into contas values('3000-x',850,0)
select * from contas
insert into contas values('4000-x',0,850,00)
if @@ERROR <> 0
rollback
else
commit
select * from contas

Transações: Exemplo de Commit e Rollback

Ao executar novamente o select, notaremos que a transação foi desfeita:

select * from contas

Transações: Exemplo de Commit e Rollback
 

 

Veja também

Comentários

Legal Luiz, explicou exatamente as transações, sem enrolação, parabens, me ajudou muito... Fabio // Brasilia-DF
© 2008-2017 | LUIS.BLOG.BR | Política de Privacidade | Em Jesus Cristo eu confio