Транзакції та обробка помилок у SQL Server
Miriam Antona
Software Engineer
COMMIT або ROLLBACKSET TRANSACTION ISOLATION LEVEL READ COMMITTED
| Брудні читання | Неповторювані читання | Фантомні читання | |
|---|---|---|---|
| READ UNCOMMITTED | так | так | так |
| READ COMMITTED | ні | так | так |
Початковий баланс рахунку 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;
Має чекати!
Початковий баланс рахунку 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 |
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 |
Плюси:
Мінуси:
Коли використовувати?:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
| Брудні читання | Неповторювані читання | Фантомні читання | |
|---|---|---|---|
| READ UNCOMMITTED | так | так | так |
| READ COMMITTED | ні | так | так |
| REPEATABLE READ | ні | ні | так |
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;
Має чекати!
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;
Має чекати!
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 рядок змінено)
Плюси:
Мінуси:
REPEATABLE READ.Коли використовувати?:
Транзакції та обробка помилок у SQL Server