MySQLは、それぞれ、4つのトランザクション分離レベルをサポートしています
コミットされていないが、非コミット読み取り読みます
コミットコミット読み取りを読みます
反復可能読み取り反復可能読み取り、この概念は、手の込んだ以下のこと*注を混在させることは容易
Serializableをシリアライザブルトランザクションの操作
1.Readコミットはコミット読み取り
READ UNCOMMITTEDにするとトランザクション分離レベルは、他のトランザクションに問い合わせることができ、他の後続のトランザクションは、結果のダーティリードをロールバックされた場合、変更はなく、まだコミットされています。最低のトランザクション分離レベルであります
コミット2.Read確定読込み
トランザクション分離レベルは、READ COMMITTEDするとき、それは他のデータの業務にお問い合わせ修正ではなく、まだコミットされていて、すべてのデータを読むことはありませんダーティリードを避けるために、その他の事項に提出されました。
次のようにしかし、新しい問題非反復可能読み取りに問題があるでしょう
リードコミッティレベルの下でトランザクションを開き、実行
名前=「コンピュータの原理」本から選択*
購入価格を含む本の数が、この時間を予約情報照会は、別のトランザクションは、書籍の数を変更し、その後、次の第1のトランザクションを提出されました
クエリが矛盾している前と後の名前=「コンピュータの原理」クエリは、書籍の数が変化しているでしょう冊SELECT * FROMを使用し、問題があったし、それは非反復可能読み取りの問題であり、
3.Repeatable読む反復可能読み取り
反復可能読み取りトランザクション分離レベルは、非反復可能読み取りの問題を避けるために、しかし、変更や他のトランザクションをブロックを修正するために注意を払うようにその他の事項を禁止するものではありませんが、この分離レベル、複数のクエリと同じ条件でスナップショットを使用して最初のクエリの結果ことを、他のトランザクションは、まだ変更を行い、データを提出することができます。結果はスナップショットですが、あなたはまだトランザクションの一貫性を確保することができ、以下のように確認することができますが、
例えば
反復可能読み取りにトランザクション分離レベル
コンピュータブックのオープン照会トランザクション原則の数
名前=「コンピュータの原理」本から合計選択
20の合計値、
そして、図書のコンピュータ理論の数を変更することから、他のトランザクションは29で、提出されました、
トランザクションを再度実行します
名前=「コンピュータの原理」本から合計選択
まだ合計20の値(上記の説明は、このスナップショットです)
トランザクションの更新操作が行われます
合計=総設定更新ブック - 1名=「コンピュータの原理」
名前再び=「コンピュータの原理は、」トランザクションの一貫性を確保するために、28の合計を見つける冊から選択合計を照会します。
反復可能読み取り分離レベルでは、新たな問題が残っている、そのファントム読み取り
ファントムは、1つのトランザクションで、手段を読んで、最初のクエリのレコードは、無見つけましたが、あなたは、このレコードは、実際に成功することができ、そして再び同じレコードを読み取るために、存在しない更新しようとすると、それは驚くべきことです彼が現れました。
4.Serializableシリアル化されたトランザクション操作
汚れを避けるために、最高のトランザクション分離レベルは、非反復可能読み取り、ファントム読み取り、読み取っ
この分離レベルでは、開いているトランザクションは、クエリを実行し、その他の事項の範囲内のクエリデータを変更したり、追加や削除される場合があり、ブロックされます、順序に従って執行部、
例えば
トランザクション分離レベルはSerializableに設定します
名前=「コンピュータの原理」の本から選択オープントランザクションの実行*
その他の事項は限りラインの「コンピュータの原理」として名を削除、変更を加えるようすなわちトランザクションAの終了後に、トランザクションによって実行順序を強制的に阻止され、彼らは続けることができます。
本から選択したトランザクションの実行*この表に実行他のトランザクションへの追加や削除になります開いているトランザクションがブロックされている場合は、順次実行トランザクションによって強制的に、つまり、トランザクションAの終了後に、彼らは続けることができます。
上記の例では、別のMySQL MySQLのデフォルトのトランザクション分離レベルで確認されている反復可能読み取りです