SQL Server におけるトランザクションとエラー処理
Miriam Antona
Software Engineer
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
| ダーティリード | 非再現読取り | ファントムリード | |
|---|---|---|---|
| READ UNCOMMITTED | あり | あり | あり |
| READ COMMITTED | なし | あり | あり |
口座5の元残高 = $35,000
トランザクション1
BEGIN TRAN
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
トランザクション2
...
...
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
「待機が必要」
口座5の元残高 = $35,000
トランザクション1
BEGIN TRAN
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;

COMMIT TRAN;
トランザクション2
...
...
...
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SELECT current_balance
FROM accounts WHERE account_id = 5;
| current_balance |
|-----------------|
| 30000,00 |
トランザクション1
BEGIN TRAN
SELECT current_balance
FROM accounts WHERE account_id = 5;
トランザクション2
...
...
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 | なし | なし | あり |
トランザクション1
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
SELECT current_balance FROM accounts
WHERE account_id = 5;
| current_balance |
|-----------------|
| 35000,00 |
トランザクション2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
「待機が必要」
トランザクション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
トランザクション2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
「待機が必要」
トランザクション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
トランザクション2
...
...
UPDATE accounts
SET current_balance = 30000
WHERE account_id = 5;
(1 rows affected)
長所:
短所:
REPEATABLE READ によりブロックされる場合あり適用場面:
SQL Server におけるトランザクションとエラー処理