Você está na página 1de 11

Transaes em SQL

Por default, todo comando individual considerado uma transao


exemplo:
DELETE FROM Pacientes
exclui todas ou no exclui nenhuma linha de pacientes

Transaes em SQL
SQL Padro (SQL-92)
SET TRANSACTION
inicia e configura caractersticas de uma transao

COMMIT
encerra a transao (solicita efetivao das suas aes)

ROLLBACK
solicita que as aes da transao sejam desfeitas

Transaes em SQL
SET TRANSACTION modo de acesso
READ READ WRITE

nvel de isolamento
SERIALIZABLE REPEATABLE READ READ COMMITTED READ UNCOMMITTED

Nveis de Isolamento
SERIALIZABLE REPEATABLE READ READ COMMITTED READ UNCOMMITTED

So definidos em termos de trs problemas que devem ser evitados em execues concorrentes
Leitura suja (dirty read) Leitura no-repetitiva (nonrepeatable read) Fantasmas (phantom reads)

Leitura Suja
Suja = UNCOMMITTED

Exemplo: Mdia errada


T1
UPDATE Account SET balance = balance 200 WHERE number = 142857; SELECT AVG(balance) FROM Account; COMMIT; ROLLBACK;

T2

Execuo

Leitura no-repetitiva
Exemplo: Mdias diferentes
T1 T2
SELECT AVG(balance) FROM Account; UPDATE Account SET balance = balance 200 WHERE number = 142857; COMMIT; SELECT AVG(balance) FROM Account; COMMIT;

Execuo

Fantasma
T1 : update empregados set salario = salario * 1.1 where dep = d5

update departamentos set Total = (select sum(salario) from empregados where dep=d5) where coddep = d5
T2 : insert into empregados (cod,nome,salario,dep) values (4,Maria,1.200,d5) r1[x1] r1[x3] r1[x4] w2[x2] c2 ... w1[Total] ... c1

Quando T1 atualiza empregados, a Maria fica de fora Quando T1 escreve o Total em departamentos, este valor no mais o atual!!! Soluo: Existir algum tipo de bloqueio de insero

Nveis de Isolamento
ISOLATION LEVEL
uma transao Ti pode assumir
SERIALIZABLE
Ti executa com completo isolamento
no permite nem insero de linhas com chaves na faixa dos dados lidos por Ti

REPEATABLE READ
Ti s l dados efetivados e outras transaes no podem atualizar dados lidos por Ti
permite insero de linhas com chaves na faixa dos dados lidos por Ti

READ COMMITTED
Ti s l dados efetivados, mas outras transaes podem atualizar dados lidos por Ti

READ UNCOMMITTED
Ti pode ler dados que ainda no sofreram efetivao

Nveis de Isolamento
Porque permitir nveis de isolamento menos rigorosos (suscetveis a problemas)?
Tais como
REPEATABLE READ READ COMMITTED READ UNCOMMITTED

Aumentar a performance
Eliminando overhead Permitir maior grau de concorrncia

Possveis violaes baseadas em nveis de Isolamento


Isolamanto / problema READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE Leitura suja Leitura no-repetitiva Fantasma Sim No No No Sim Sim No No Sim Sim Sim No

Exerccios
Para cada transao abaixo marque o nvel de isolamento mais adequado. As operaes so realizadas na tabela Contas (NumConta, Saldo).
BEGIN TRANSACTION T1 UPDATE Contas SET Saldo = (SELECT Saldo FROM Contas WHERE NumConta = 10) 100 WHERE NumConta = 10 COMMIT TRANSACTION T1

Serializable Repeatable read Read committed Read uncommitted

BEGIN TRANSACTION T2 INSERT INTO Contas VALUES (11, 1200) COMMIT TRANSACTION T2

Serializable Repeatable read Read committed Read uncommitted