Transakce a zpracování chyb v SQL Serveru
Miriam Antona
Software Engineer
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
| Špinavá čtení | Neopakovatelná čtení | Fantomová čtení | |
|---|---|---|---|
| READ UNCOMMITTED | ano | ano | ano |
| READ COMMITTED | ne | ano | ano |
Původní zůstatek účtu 5 = 35 000 $
Transakce1
BEGIN TRAN
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
Transakce2
...
...
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
Musí čekat!
Původní zůstatek účtu 5 = 35 000 $
Transakce1
BEGIN TRAN
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

COMMIT TRAN;
Transakce2
...
...
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00 |
Transakce1
BEGIN TRAN
SELECT current_balance
FROM accounts WHERE account_id = 5;
Transakce2
...
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00 |
Výhody:
Nevýhody:
Kdy jej použít?:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
| Špinavá čtení | Neopakovatelná čtení | Fantomová čtení | |
|---|---|---|---|
| READ UNCOMMITTED | ano | ano | ano |
| READ COMMITTED | ne | ano | ano |
| REPEATABLE READ | ne | ne | ano |
Transakce1
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
SELECT current_balance FROM accounts
WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00 |
Transakce2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
Musí čekat!
Transakce1
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
Transakce2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
Musí čekat!
Transakce1
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
Transakce2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
Výhody:
Nevýhody:
REPEATABLE READKdy jej použít?:
Transakce a zpracování chyb v SQL Serveru