Dirty reads(ダーティー リード) | ユーザー 1 が行を変更します。ユーザー 1 がコミットする前に、ユーザー 2 が同じ行を読み取ります。ユーザー 1 がロールバックします。ユーザー 2 は、実際にはデータベースに存在しない行を読み取ったことになります。これによって、ユーザー 2 は誤ったデータに対して判断を下すことになるかもしれません。 |
Non-repeatable reads(反復不可能な読み取り) | ユーザー 1 が行を読み取りましたがコミットしません。ユーザー 2 がその同じ行を修正または削除し、それをコミットします。ユーザー 1 がもう一度同じ行を読み取ったときは、その行が変更または削除されています。 |
Phantom reads(ファントム リード) | ユーザー 1 は、検索条件を使用して複数行のセットを読み取りましたがコミットはしません。ユーザー2 がこの検索条件を満たす行を挿入し、コミットします。ユーザー 1 が検索条件を使ってもう一度読み取ったときには、前になかった行が存在することになります。 |
Read uncommitted (0) (コミットされていない読み取り) | データベースを変更するときにロックがかかり、トランザクションの終わり(EOT)まで維持されます。データベースの読み取りには、ロックがかかりません。 |
Read committed (1) (コミットされた読み取り) | データベースの読み取りと変更時にロックがかかります。読み取り後にロックは解除されますが、変更されたオブジェクトのロックは EOT まで維持されます。 |
Repeatable read (2) (反復可能な読み取り) | データベースの読み取りと変更時にロックがかかります。変更されたすべてのオブジェクトのロックは EOT まで維持されます。データの読み取りロックは、EOT まで維持されます。変更不可能なアクセス構造(インデックスおよびハッシュ構造など)のロックは読み取り後に解除されます。 |
Serializable (3) (直列化可能) | DataSet の影響を受ける行に、EOT までロックがかかります。変更されたアクセス構造、およびクエリで使われた構造がすべて EOT までロックされます。 |
レベル | Dirty Read | Nonrepeatable Read | Phantom Read |
0, Read uncommitted | 可 | 可 | 可 |
1, Read committed | 不可 | 可 | 可 |
2, Repeatable read | 不可 | 不可 | 可 |
3, Serializable | 不可 | 不可 | 不可 |