原因は3つの読み取り法です:変化へのデータのリード線の同時アクセスによるものです
1.ダーティリード(非コミット読み取り)
トランザクションは、エラーが発生し、Bは、その後、トランザクションはダーティデータを読み取ることであれば、データBのトランザクションは、トランザクションのロールバック操作が登録されていません読み込みます。
2.非反復可能読み取り(前に何度も読んで、一貫性のないデータを見つけました)
トランザクションAは非常に長い時間を通過する必要があるかもしれません前に、データを読んだ後で、完全な、比較的大きいため、読み取り操作は、トランザクションで実行されます。トランザクションAが完成読取データを有する場合、次に、イベントBが実行する変更操作を、前のデータが修正された、ときに、第2の時間を読んで、以前に異なるとリードデータの内容を発見されたデータのトランザクションA列であること、データが繰り返されていません。
トランザクション | トランザクションB | |
1 | トランザクションを開始 | |
2 | まず、リードデータ、20の暁明年齢 | |
3 | トランザクションを開始 | |
4 | その他の操作 | |
5 | 30の変更暁明の年齢 | |
6 | トランザクションをコミットします | |
7 | 第2のデータを読み込み、年齢のためのこの時間は30暁明です | |
リマーク | 通常のロジックによれば、データA取引の前と後の二回取ら一貫している必要があります |
3.ファントムリード(データの矛盾の量が発見され、前後に何回も読んで)
読み出し動作を行った後のトランザクションの合計量は、一度に問い合わせ前に2つの統計、データの合計量を必要とする; Bは、新たなデータの操作ここで取引合計金額を行い、提出する;第2のイベントのためにAさらにいくつかのデータよりも理由もなく、同じような錯覚を持っていたとして、データの総量は、統計の異なる数で初めて発見されたリード。
トランザクション | トランザクションB | |
1 | トランザクションを開始 | |
2 | 最初のクエリは、データ量を想定することは100であります | |
3 | トランザクションを開始 | |
4 | その他の操作 | |
5 | 100の新しく追加されたデータ | |
6 | トランザクションをコミットします | |
7 | 第二の問い合わせは、データの量が200に持っていることがわかりました | |
リマーク | 通常のロジックによれば、データA取引の前と後の二回取ら一貫している必要があります |