Transactions et gestion des erreurs dans SQL Server
Miriam Antona
Software Engineer
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
| Lectures sales | Lectures non répétables | Lectures fantômes | |
|---|---|---|---|
| READ UNCOMMITTED | oui | oui | oui |
| READ COMMITTED | non | oui | oui |
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 !
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 |
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 |
Avantages :
Inconvénients :
Quand l'utiliser ?
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
| 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 |
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 !
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 !
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)
Avantages :
Inconvénients :
REPEATABLE READ.Quand l'utiliser ?
Transactions et gestion des erreurs dans SQL Server