READ COMMITTED & REPEATABLE READ

Tranzacții și gestionarea erorilor în SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Nivel de izolare implicit
  • Nu poate citi date modificate de o altă tranzacție neconfirmată sau neretrasă
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Tranzacții și gestionarea erorilor în SQL Server

READ COMMITTED - comparație niveluri de izolare

Citiri murdare Citiri non-repetabile Citiri fantomă
READ UNCOMMITTED da da da
READ COMMITTED nu da da
Tranzacții și gestionarea erorilor în SQL Server

READ COMMITTED - prevenirea citirilor murdare

Soldul inițial al contului 5 = $35.000

Transaction1

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

Transaction2

...

...

...

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

Trebuie să aștepte!

Tranzacții și gestionarea erorilor în SQL Server

READ COMMITTED - prevenirea citirilor murdare

Soldul inițial al contului 5 = $35.000

Transaction1

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

COMMIT TRAN;

Transaction2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Tranzacții și gestionarea erorilor în SQL Server

READ COMMITTED - selectare fără așteptare

Transaction1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transaction2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Tranzacții și gestionarea erorilor în SQL Server

READ COMMITTED - rezumat

Avantaje:

  • Previne citirile murdare

Dezavantaje:

  • Permite citiri non-repetabile și fantomă
  • Poate fi blocat de o altă tranzacție

Când se utilizează?:

  • Când doriți să citiți doar date confirmate, fără citiri non-repetabile și fantomă
Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Nu poate citi date neconfirmate din alte tranzacții
  • Dacă unele date sunt citite, alte tranzacții nu le pot modifica până la finalizarea tranzacției REPEATABLE READ
Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ - comparație niveluri de izolare

Citiri murdare Citiri non-repetabile Citiri fantomă
READ UNCOMMITTED da da da
READ COMMITTED nu da da
REPEATABLE READ nu nu da
Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ - prevenirea citirilor non-repetabile

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Trebuie să aștepte!

Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ - prevenirea citirilor non-repetabile

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Trebuie să aștepte!

Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ - prevenirea citirilor non-repetabile

Transaction1

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

Transaction2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Tranzacții și gestionarea erorilor în SQL Server

REPEATABLE READ - rezumat

Avantaje:

  • Împiedică alte tranzacții să modifice datele citite; previne citirile non-repetabile
  • Previne citirile murdare

Dezavantaje:

  • Permite citiri fantomă
  • Poate fi blocat de o tranzacție REPEATABLE READ.

Când se utilizează?:

  • Când doriți să citiți doar date confirmate și să împiedicați modificarea lor, fără a vă preocupa de citirile fantomă
Tranzacții și gestionarea erorilor în SQL Server

Să exersăm!

Tranzacții și gestionarea erorilor în SQL Server

Preparing Video For Download...