READ COMMITTED & REPEATABLE READ

Transaktioner och felhantering i SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Standardisolationsnivå
  • Kan inte läsa data som ändrats av en annan transaktion som inte har committats eller återrullats
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transaktioner och felhantering i SQL Server

READ COMMITTED – jämförelse av isolationsnivåer

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
Transaktioner och felhantering i SQL Server

READ COMMITTED – förhindrar dirty reads

Ursprungligt saldo konto 5 = $35 000

Transaktion 1

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

Transaktion 2

...

...

...

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

Måste vänta!

Transaktioner och felhantering i SQL Server

READ COMMITTED – förhindrar dirty reads

Ursprungligt saldo konto 5 = $35 000

Transaktion 1

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

COMMIT TRAN;

Transaktion 2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transaktioner och felhantering i SQL Server

READ COMMITTED – läsning utan att vänta

Transaktion 1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transaktion 2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transaktioner och felhantering i SQL Server

READ COMMITTED – sammanfattning

Fördelar:

  • Förhindrar dirty reads

Nackdelar:

  • Tillåter non-repeatable reads och phantom reads
  • Du kan blockeras av en annan transaktion

När ska du använda det?:

  • När du vill säkerställa att du bara läser committad data, men inte bryr dig om non-repeatable reads och phantom reads
Transaktioner och felhantering i SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Kan inte läsa ocommittad data från andra transaktioner
  • Om data har lästs kan andra transaktioner inte ändra den datan förrän REPEATABLE READ-transaktionen är klar
Transaktioner och felhantering i SQL Server

REPEATABLE READ – jämförelse av isolationsnivåer

Dirty reads Non-repeatable reads Phantom reads
READ UNCOMMITTED yes yes yes
READ COMMITTED no yes yes
REPEATABLE READ no no yes
Transaktioner och felhantering i SQL Server

REPEATABLE READ – förhindrar non-repeatable reads

Transaktion 1

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

Transaktion 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Måste vänta!

Transaktioner och felhantering i SQL Server

REPEATABLE READ – förhindrar non-repeatable reads

Transaktion 1

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

Transaktion 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Måste vänta!

Transaktioner och felhantering i SQL Server

REPEATABLE READ – förhindrar non-repeatable reads

Transaktion 1

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

Transaktion 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transaktioner och felhantering i SQL Server

REPEATABLE READ – sammanfattning

Fördelar:

  • Förhindrar att andra transaktioner ändrar data du läser, samt non-repeatable reads
  • Förhindrar dirty reads

Nackdelar:

  • Tillåter phantom reads
  • Du kan blockeras av en REPEATABLE READ-transaktion.

När ska du använda det?:

  • När du bara vill läsa committad data och inte vill att andra transaktioner ändrar det du läser. Du behöver inte oroa dig för phantom reads
Transaktioner och felhantering i SQL Server

Nu kör vi en övning!

Transaktioner och felhantering i SQL Server

Preparing Video For Download...