O comando BEGIN inicia um bloco de comandos SQL que fazem parte de uma transação. Os comandos realizados após o este comando só são persistidos em disco e seus resultados só são apresentados aos demais usuários do banco após a efetivação com o comando COMMIT.
A transação é finalizada pelo comando COMMIT, o qual dispara a efetivação da transação no banco de dados e torna visível para os demais usuários os resultados da execução dos seus comandos.
O comando ROLLBACK aborta a transação que está em andamento, impedindo que os as alterações nos dados nela realizadas sejam persistidos no banco de dados.
Sintaxe:
BEGIN [ WORK | TRANSACTION ] [ transaction_mode [, ...] ]
onde o transaction_mode é um dos listados abaixo:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
READ WRITE | READ ONLY
Obs.: os transaction modes serão discutidos em maior profundidade ao se detalhar o comando SET TRANSACTION.
COMMIT [ WORK | TRANSACTION ]
ROLLBACK [ WORK | TRANSACTION ]
Exemplos:
1 - Sintaxe mais simples com BEGIN e COMMIT
BEGIN;
insert into tstdel values (1,'teste', current_timestamp);
insert into tstdel values (2,'teste2', current_timestamp);
SELECT * FROM tstdel;
COMMIT;
2 - Sintaxe mais simples com BEGIN e COMMIT. A cláusula WORK não tem efeito é é mantida por compatibilidade.
BEGIN WORK;
insert into tstdel values (1,'teste', current_timestamp);
insert into tstdel values (2,'teste2', current_timestamp);
SELECT * FROM tstdel;
COMMIT WORK;
3 - Sintaxe mais simples com BEGIN e COMMIT. A cláusula TRANSACTION não tem efeito é é mantida por compatibilidade.
BEGIN TRANSACTION;
insert into tstdel values (1,'teste', current_timestamp);
insert into tstdel values (2,'teste2', current_timestamp);
SELECT * FROM tstdel;
COMMIT TRANSACTION;
4 - A transação abaixo é abortada com o ROLLBACK. A inserção realizada não é gravada no banco de dados.
BEGIN;
insert into tstdel values (1,'teste', current_timestamp);
ROLLBACK;
5 - A transação abaixo é abortada com o ROLLBACK. A inserção realizada não é gravada no banco de dados. A cláusula WORK não tem efeito e é mantida por compatibilidade.
BEGIN;
insert into tstdel values (1,'teste', current_timestamp);
ROLLBACK WORK;
6 - A transação abaixo é abortada com o ROLLBACK. A inserção realizada não é gravada no banco de dados. A cláusula TRANSACTION não tem efeito e é mantida por compatibilidade.
BEGIN;
insert into tstdel values (1,'teste', current_timestamp);
ROLLBACK TRANSACTION;
Um comentário:
Legal, veja esse:
http://unicodebrasil.wordpress.com/2012/04/12/usando-commit-e-rollback/
Postar um comentário