Transaction Issues

データベーストランザクションが並行(へいこう) 実行(じっこう) される(さい)発生(はっせい) しうる問題(もんだい) 。これらの問題(もんだい)(こと) なる分離(ぶんり) レベルによって防止(ぼうし) できる。

Dirty Read

ダーティリード

あるトランザクションが、まだコミットされていない(un-commit)(べつ) のトランザクションのデータを()() ること。そのトランザクションが最終的(さいしゅうてき) にロールバックされた場合(ばあい)()() ったデータは不正確(ふせいかく) となる。

MySQL Demo

TimeTransaction ATransaction B
T0SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
T1BEGIN;BEGIN;
T2UPDATE employees SET salary = 600000.00 WHERE id = 1;
T3SELECT * FROM employees WHERE id = 1; — トランザクション A の() コミット変更(へんこう)()()
T4COMMIT;

Phantom Read

ファントムリード

あるトランザクション(ない)(おな) じクエリを複数回(ふくすうかい) 実行(じっこう) した(さい)(ほか) のトランザクションがクエリ条件(じょうけん)該当(がいとう) する(ぎょう)挿入(そうにゅう)更新(こうしん) 、または削除(さくじょ) したことにより、毎回(まいかい) (こと) なる結果(けっか)(かえ) されること。

詳細(しょうさい)(れい)参照(さんしょう)Gap Lock によるファントムリード防止(ぼうし)

Non-Repeatable Read

反復不能読み取り

あるトランザクション(ない)(おな) じデータを複数回(ふくすうかい) ()() った(さい)(べつ) のトランザクションの更新(こうしん) によりデータの(あたい)変化(へんか) すること。

MySQL Demo

TimeTransaction ATransaction B
T0SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
T1BEGIN;BEGIN;
T2SELECT * FROM employees WHERE id = 1;最初(さいしょ)()()
T3UPDATE employees SET salary = 6666.00 WHERE id = 1;
T4COMMIT;
T5SELECT * FROM employees WHERE id = 1;再度(さいど) ()() り、データが() わっている
T6COMMIT;

関連トピック