READ COMMITTED & REPEATABLE READ

Transações e tratamento de erros no SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Nível de isolamento padrão
  • Não lê dados modificados por outra transação que não fez commit ou rollback
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transações e tratamento de erros no SQL Server

READ COMMITTED - comparação de níveis de isolamento

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
Transações e tratamento de erros no SQL Server

READ COMMITTED - evitando dirty reads

Saldo original da conta 5 = $35.000

Transação1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

Transação2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;

Tem que esperar!

Transações e tratamento de erros no SQL Server

READ COMMITTED - evitando dirty reads

Saldo original da conta 5 = $35.000

Transação1

BEGIN TRAN
  UPDATE accounts
  SET current_balance = 30000
  WHERE account_id = 5;

COMMIT TRAN;

Transação2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transações e tratamento de erros no SQL Server

READ COMMITTED - selecionando sem esperar

Transação1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transação2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transações e tratamento de erros no SQL Server

READ COMMITTED - resumo

Prós:

  • Evita dirty reads

Contras:

  • Permite non-repeatable e phantom reads
  • Você pode ser bloqueado por outra transação

Quando usar?:

  • Você quer ler só dados com commit; não evita non-repeatable nem phantom reads
Transações e tratamento de erros no SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Não lê dados não confirmados de outras transações
  • Se algum dado foi lido, outras transações não podem modificá-lo até a transação REPEATABLE READ terminar
Transações e tratamento de erros no SQL Server

REPEATABLE READ - comparação de níveis de isolamento

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
REPEATABLE READ no no yes
Transações e tratamento de erros no SQL Server

REPEATABLE READ - evitando non-repeatable reads

Transação1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |

Transação2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Tem que esperar!

Transações e tratamento de erros no SQL Server

REPEATABLE READ - evitando non-repeatable reads

Transação1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
COMMIT TRAN

Transação2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Tem que esperar!

Transações e tratamento de erros no SQL Server

REPEATABLE READ - evitando non-repeatable reads

Transação1

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
    SELECT current_balance FROM accounts
    WHERE account_id = 5;
COMMIT TRAN

Transação2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transações e tratamento de erros no SQL Server

REPEATABLE READ - resumo

Prós:

  • Impede outras transações de modificar o que você está lendo; evita non-repeatable reads
  • Evita dirty reads

Contras:

  • Permite phantom reads
  • Você pode ser bloqueado por uma transação REPEATABLE READ.

Quando usar?:

  • Quer ler só dados com commit e não quer que mudem o que você lê. Phantom reads não são um problema
Transações e tratamento de erros no SQL Server

Vamos praticar!

Transações e tratamento de erros no SQL Server

Preparing Video For Download...