READ COMMITTED & REPEATABLE READ

Transactions et gestion des erreurs dans SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Niveau d'isolation par défaut
  • Impossible de lire des données modifiées par une autre transaction non validée ou annulée
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - comparaison des niveaux d'isolation

Lectures sales Lectures non répétables Lectures fantômes
READ UNCOMMITTED oui oui oui
READ COMMITTED non oui oui
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - empêcher les lectures sales

Solde initial compte 5 = 35 000 $

Transaction 1

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

Transaction 2

...

...

...

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

Doît attendre !

Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - empêcher les lectures sales

Solde initial compte 5 = 35 000 $

Transaction 1

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

COMMIT TRAN;

Transaction 2

...

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00        |
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - sélectionner sans attendre

Transaction 1

BEGIN TRAN
  SELECT current_balance
  FROM accounts WHERE account_id = 5;

Transaction 2

...

...

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00        |
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - récapitulatif

Avantages :

  • Empêche les lectures sales

Inconvénients :

  • Autorise les lectures non répétables et fantômes
  • Vous pouvez être bloqué par une autre transaction

Quand l'utiliser ?

  • Vous voulez lire uniquement des données validées, malgré d'éventuelles lectures non répétables et fantômes
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • Impossible de lire des données non validées par d'autres transactions
  • Si des données sont lues, les autres transactions ne peuvent pas les modifier tant que la transaction REPEATABLE READ n'est pas terminée
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - comparaison des niveaux d'isolation

Lectures sales Lectures non répétables Lectures fantômes
READ UNCOMMITTED oui oui oui
READ COMMITTED non oui oui
REPEATABLE READ non non oui
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - empêcher les lectures non répétables

Transaction 1

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

Transaction 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Doît attendre !

Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - empêcher les lectures non répétables

Transaction 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

Transaction 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

Doît attendre !

Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - empêcher les lectures non répétables

Transaction 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

Transaction 2

...

...

UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - récapitulatif

Avantages :

  • Empêche d'autres transactions de modifier les données que vous lisez ; pas de lectures non répétables
  • Empêche les lectures sales

Inconvénients :

  • Autorise les lectures fantômes
  • Vous pouvez être bloqué par une transaction REPEATABLE READ.

Quand l'utiliser ?

  • Vous voulez lire uniquement des données validées et empêcher les modifications concurrentes de ce que vous lisez. Les lectures fantômes ne vous gênent pas
Transactions et gestion des erreurs dans SQL Server

Passons à la pratique !

Transactions et gestion des erreurs dans SQL Server

Preparing Video For Download...