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:
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.
A transação implícita inicia quando um dos seguintes comandos são executados: Insert, Update, Delete, Create, Drop, Alter, entre outros.
A transação explicita é iniciada pelo comando Begin transaction e é encerrada por um dos seguintes comandos:
Primeiro, criaremos uma tabela com a seguinte estrutura:
numero varchar(50),
debito decimal(10,2),
credito decimal(10,2)
)
Após criar a tabela, a transação será iniciada e um registro será inserido:
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.
rollback
select * from contas
O resultado será:
Perceba que o primeiro select mostrou que o registro havia sido feito e o segundo select mostrou que o mesmo havia sido desfeito.
Podemos usar o mesmo exemplo, mas trocando o Rollback pelo Commit. Veja o resultado:
insert into contas values('600-x',110,0)
select * from contas
commit
select * from contas
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:
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:
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):
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
Ao executar novamente o select, notaremos que a transação foi desfeita:
select * from contas
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.
COMPARTILHE: Facebook Twitter WhatsApp