四つのトランザクション分離レベルの特性&ダーティ・リードは、ファントム読み取り、非反復読み取りトランザクション差&

まず、トランザクション何
トランザクション;全体が一緒にシステムに送信されるように、いずれかの実行または実行されていないこれらの操作、作業データベース操作の最小単位で、実行される作業の単一の論理ユニットとしての一連の動作トランザクションがセットされています操作のもはや分割セット(作業論理単位)。

トランザクションの4つの特徴:
1、アトミック(不可分):.不可分業務を強調
トランザクションが作業データベースの論理的な単位であり、トランザクション内のすべての操作のいずれかを行う、または行わない含ま

2、一貫性(一貫性):一貫性のあるトランザクションの実行前と後のデータの整合性
トランザクションの結果は、別の一貫した状態に一貫性のある状態から、データベースの変更を行うために実行する必要があります。そのため、データベースが成功したトランザクションの結果だけがコミット含まれている場合に、一貫性のある状態でデータベースを言います。障害データベース・システムが実行されている場合、いくつかは、その後、データベースは悪い状態になり、データベースに対して行われた変更を完了しなかったこれらのトランザクションは、データベースの物理的な部分に書き込まれているが完了していないトランザクションを中断することを強制、またはあるし、矛盾した状態。

図3に示すように、分離(単離):トランザクションの実行を処理し、他のトランザクションからの干渉を受けてはならない
トランザクションの実行は、他の事項に干渉しないことができます。すなわち、操作および他の同時トランザクションが単離されると同時に実行される各トランザクションの間に互いに干渉することができないトランザクション内のデータを使用します。

4、持続性(耐久性):トランザクションの終了後、データベースへのデータの永続性
も永久としても知られているが、トランザクションがコミットされると、データベース内のデータを変更すると、それは永久的でなければならないことであることを意味します。次の操作またはその他の障害が結果に影響を及ぼさないようにしてください。

トランザクションのJDBCネイティブな処理は以下のとおりです。

try{
    connection.setAutoCommit( false);
      数据库操作...
    connection.commit();
}catch(Exception ex){
    connection.rollback();
}finally{
    connection.setAutoCommit( true);
}   

第二に、そして起こっ害するいかなるトランザクション分離がない場合?

図1に示すように、ダーティ・リード(単一データに対するコミットされていないデータを、読み出し)
2、非反復可能読み取り(単一のデータにも重点を置いて、異なるデータを読み取った読んでいたが、変更、および削除が、)
3 、ファントムリード(読み出しデータのための新しい、マルチペンに重点を置いて、異なるデータを読み取り、それぞれ、ありました)

1.ダーティ読み取り:トランザクションデータは別のコミットされていないトランザクションを読み取ることができます。これは、データ自体のために単一のデータ用として理解することができるということですここで注意しなければなりません。

個人的な理解は:トランザクションは、クエリデータを開かれている、およびトランザクションBは、データを変更する合計をオンにするが、その後、トランザクションAが実施している、クエリを提出しなかった、2つのペンデータ、トランザクションと同じでありませんBは、トランザクションが、トランザクションBがコミットされていないが、変更されたデータを読み取るようにトランザクションのロールバックトランザクションBは、であり、終了していません。これは、提出されたデータの根本的な原因がないので、それが読まれた発生します。
解決することができます(コミット読み取り)提出読んでする必要があります。

2、非反復可能読み取ります。読み取りトランザクションを、それぞれ異なるデータを読み込みます。これは、ここで注意しなければならないロック列を解決できるように、データ自体のために、データの変更や削除に焦点を当てた、単一のデータとして理解することができるということです。

個人的な理解:トランザクションデータのクエリ、そして物事のデータの合計値が変更されたオープンB、(ここで提出)を提出し、トランザクションデータのクエリと異なるのと同じ合計を発見しました、そのトランザクションを読んで二つの異なるデータ、異なるデータと同じペンから読み込ん2倍のデータを作りました。これは、トランザクションの根本原因は、Aから読まれるべきである場合には、他のトランザクションデータが変更されているが発生します。
提出読む(コミット読み取り)反復可能読み取り(反復可能読み取り)の必要性を解決することができ、解決するには十分ではありません。

図3は、ファントムを読む:読み出しトランザクションは、それぞれ異なるデータを読み込みます。これは、ここで注意しなければならないデータセットで、フォーカスが新しいデータであるので、テーブルロックを解決することができる個数のデータは、データ用のペン以上のものとして理解することができるということです。

個人的な理解:(ここで提出)提出に続いて、データの合計が追加されたために、取引データのクエリ、そして物事オープンB、、、その後、トランザクションデータのクエリとが見つかりました。その結果のクエリ結果セットは同じではありません。マジックのレコードのマルチ読み取りです。提出読む(コミット読み取り)、直列化を解消することができる直列化の必要性解決には十分ではありません。

:非反復可能読み取りとファントムは違いを読んで
二回、両方のデータクエリ、全体から、結果は二度同じクエリではありません。
あなたが制御の観点からしている場合でも、違いが比較的大きい
レコードだけが条件を満たしてロックし、前者が
後者はそのレコード近いの条件を満たすようにロックするために

非反復可能読み取りロックラインを回避する必要があります。
私たちは、ロックテーブルを読み込むファントムを回避する必要があります。

実際、両方のと少し似て。しかし、非反復更新に焦点を読み込み、削除、およびファントムは焦点がインサートである読み込みます。

ロック機構は、反復可能読み取りでは、分離のこれら二つのレベルを達成するために、最初の読み出しSQLデータを使用した場合、データはロックされ、他のトランザクションは、これらのデータを変更することはできません、我々は反復可能読み取りを達成することができます。しかし、この方法は、あなたがいない前に不可解以上のものを見つけるのトランザクションA、トランザクションAが以前のデータを読み込む、またはすべてのデータを変更するときに、トランザクションBは、まだ挿入データを提出することができ、データの挿入をロックすることはできません魔法読み込まれたデータは、行ロックすることで回避することはできません。ダーティリードやその他の問題が、大幅同時実行データベースを削減する、非反復可能読み取り、そうすることが効果的ファントム読み取りを防止することができ、ロックミューテックスを読み書き、ロックを書き込み、書き込み、読み取りロックを読んで、シリアライズ可能分離レベルを必要とします容量。
だから、反復不能読み取りとファントムは、最大の違いは、ロック機構によって生成された彼らの問題を解決する方法であるお読みください。

それはこれらの2つの問題に対処するために悲観的ロック機構を使用することで、上記の言ったが、MySQL、ORACLE、PostgreSQLと他の洗練されたデータベース、パフォーマンス上の理由から、MVCC(マルチバージョン同時実行制御の理論的基礎として楽観的ロックを使用しています)両方の問題を避けるために。

第三に、トランザクション分離レベル

DEFAULT
使用して、データベース自体の分離レベル用いて
ORACLEをMySQLの(反復可能読み取り)(コミットを読みます)

非コミット読み取り
定義によって、コミットされていない読んで、トランザクションが別のデータにコミットされていないトランザクションを読み取ることができます。

コミット読み取り
コミット読み取りを、定義によって、トランザクションがデータを読み取るためにコミットし、別のトランザクションを待機する必要があります。
ダーティリードを解決するが、非反復可能読み取りとファントム読み取りを解決することはできません。

反復可能読み取り
反復可能読み取りは、データ(オープントランザクション)の開始時に読み込まれ、もはや操作を変更することができない
非反復可能読み取りを解決するために、しかし、ファントム読み取り解決することはできません。

シリアライズシリアライズ
シリアライズトランザクション分離レベルは、このレベルでは、最も高い、汚れを回避するために、トランザクションの実行直列化順序は、読み込み、非反復可能読み取りとファントムをお読みください。しかし、これは非効率的なトランザクション分離レベル、データベースの比較消費性能は、一般的に使用されていないです。

おすすめ

転載: www.cnblogs.com/zhangsonglin/p/11131705.html