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.

Home » Tecnologia

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.

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

Quando devo usar apostrofe ou aspas simples em SQL e banco de dados

O uso do apostrofe é necessário no INSERT INTO, UPDATE e alguns casos de SELECT. Sua finalidade é delimitar os valores que serão inseridos no banco de dados e evitar possíveis confusões na "cabeça do banco de dados" na hora de executar esses comandos. Isto pode acontecer especialmente nos campos que armazenam valores do tipo texto, como o char, varchar, text e também os tipos data, como date, datetime e outros.

Na instrução SQL cada coisa tem seu significado e você já deve saber disso, como a vírgula que é o separador entre o nome de uma campo e outro ou de um valor e outro. No caso do INSERT, por exemplo, os valores que estão entre vírgulas devem ser únicos e para garantir que isso seja verdade, os campos do tipo texto devem ter o apostrofe como delimitadores, instruindo o banco onde começa e onde termina o valor.

Para os campos numéricos como o INT, Real, decimal, numeric e outros isto não é necessário, pois os valores que serão inseridos já devem estar no formato correto, ou seja, precisam ser numéricos. Um campo texto poderá receber caracteres especiais e espaços em branco, por exemplo, mas os campos numéricos não recebem esse tipo de valor e portanto já são únicos por natureza.

Apóstrofe ou aspas simples?

Aproveitando, só queria ressaltar que o termo correto é mesmo o apóstrofe e não as aspas simples como é comum ouvirmos e inclusive lermos em livros técnicos de programação. Aspas simples não existe no português, isto é uma importação e adaptação do inglês.


VEJA TAMBÉM:

CANAL NO YOUTUBE

INSCREVA-SE:



Sistemas Web

Playlist de SQL

Youtube Youtube Youtube
© 2021 - Utilidade Pública: Tecnologia, Educação e Cidadania.