READ COMMITTED et REPEATABLE READ

Transactions et gestion des erreurs dans SQL Server

Miriam Antona

Software Engineer

READ COMMITTED

  • Niveau d'isolement 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'isolement

Lectures sales Lectures non reproductibles 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 du compte 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;

Doits attendre !

Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - empêcher les lectures sales

Solde initial du compte 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        |
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - sélectionner sans attente

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        |
Transactions et gestion des erreurs dans SQL Server

READ COMMITTED - résumé

Avantages :

  • Empêche les lectures sales

Inconvénients :

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

Quand l'utiliser ?

  • Vous voulez lire uniquement des données validées, tout en acceptant les lectures non reproductibles 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 d'autres transactions
  • Si des données sont lues, les autres transactions ne peuvent pas les modifier avant la fin de la transaction REPEATABLE READ
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - comparaison des niveaux d'isolement

Lectures sales Lectures non reproductibles 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 reproductibles

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;

Doits attendre !

Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - empêcher les lectures non reproductibles

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;

Doits attendre !

Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - empêcher les lectures non reproductibles

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 ligne concernée)
Transactions et gestion des erreurs dans SQL Server

REPEATABLE READ - résumé

Avantages :

  • Empêche d'autres transactions de modifier les données que vous lisez; évite les lectures non reproductibles
  • 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 sans qu'elles puissent être modifiées pendant votre lecture; les lectures fantômes ne vous dérangent pas
Transactions et gestion des erreurs dans SQL Server

Passons à la pratique !

Transactions et gestion des erreurs dans SQL Server

Preparing Video For Download...