データベース・トランザクションの4つの独立性レベル
データベースには、次の4つの独立性レベルが定義されています.
この4つの独立性は順次上昇し、独立性レベルが低いほど、システムのオーバーヘッドが小さくなり、同時サポート性が高くなります.
コマンド
4つの独立性レベルを説明する前に、トランザクションを使用するときに発生する3つの特殊な(ほとんどの場合エラーになる)読み取りタイプについて説明します. が増加する.
繰り返し読みと幻読みを混同しないように注意
Read Uncommited RUモードでは、トランザクションにcommitがない場合でも、他のトランザクションでコミットされていないデータを読み込むことができます. RUは、すべての独立性レベルの中で最も低いものです.RUモードはダーティリード を引き起こす
Read Commited RCモードでは、トランザクションはcommit済みのデータしか読み込めません. 例えば、トランザクションaが実行されている場合、トランザクションbがコミットされていない場合、aはbのデータを読めない.bがaをコミットすれば、bが修正したデータが読めます. RCは汚れた読み取りを避けることができますが、重複しない読み取りを招きます. の大部分のシステムはRCモード を使用する
Repeatable RRモードでは、トランザクションの複数回のReadは、コミットの有無にかかわらず、他のトランザクションの影響を受けません. は、RRモードでトランザクションaが作成されたときに現在の時刻データのスナップショットを取得し、スナップショットが残りのトランザクションの影響を受けないことを理解することができる. RRモードでは、残りのトランザクションが認識されないため、重複した挿入を引き起こす可能性があります. mysql innoDBのRRモードはある程度幻読を避けることができ,この特性は
Serializableはシリアル化され、その名の通り、すべての読み書き操作を完全にシリアル化しています. シリアル化は、すべての独立性レベルの中で最も高い です.は、読むたびにテーブルレベルの共有ロックを取得する必要があり、読み書きは互いに をブロックする.シリアル化はリソースに対するオーバーヘッドが大きく、同時サポートにはよくなく、一部のシーンでのみ使用されます.
最後に、3つのリード・タイプに対する4つの独立性レベルの対照表を示します.
独立性レベル
汚読
繰り返し不可
まぼろし読み
Read Uncommited
かもしれない
かもしれない
かもしれない
Read Commited
あり得ない
かもしれない
かもしれない
Repeatable Read
あり得ない
あり得ない
かもしれない
Serializable
あり得ない
あり得ない
あり得ない
Read Uncommitted( )
Read Committed( )
Repeatable Read( )
Serializable( )
この4つの独立性は順次上昇し、独立性レベルが低いほど、システムのオーバーヘッドが小さくなり、同時サポート性が高くなります.
コマンド
show variables like '%isolation%';
を使用して、現在のデータベースで使用されている独立性レベルを表示します.4つの独立性レベルを説明する前に、トランザクションを使用するときに発生する3つの特殊な(ほとんどの場合エラーになる)読み取りタイプについて説明します.
ダーティリードとは、1つのトランザクションaが1つのデータを修正または追加し、aトランザクションがコミットされる前に別のトランザクションbがこのデータを読み取り、操作することを意味する.aロールバックすると、汚れた読み取りによりb操作に存在しないデータが発生する可能性がある.
は、1つのトランザクションの同じ条件のクエリが2回一致しない.例えば、aトランザクションがselect count(*) from user where name='alex'
を実行すると、トランザクションbがデータname=alexを挿入してコミットされ、トランザクションaが2回目のクエリを行うときに1つのカウント
幻読みは繰り返し不可とは逆に、トランザクションaとトランザクションbは完全に隔離され、トランザクションaが'select id from user
を実行するidは1と2である.このとき、bトランザクションはuserテーブルにデータid=3を追加してコミットし、トランザクションaはidが3のデータを追加したいと考えています.idが一意である場合、aは挿入できないことを発見し、dumplicate entry 3 for key idを提示します.これは、トランザクションaがトランザクションbの挿入行為を阻止するためです.繰り返し読みと幻読みを混同しないように注意
Read Uncommited
Read Commited
Repeatable
(gap lock)
によって実現され,ギャップロックの原理はこの文章を参照することができる.http://www.jianshu.com/p/bf86... Serializable
最後に、3つのリード・タイプに対する4つの独立性レベルの対照表を示します.
独立性レベル
汚読
繰り返し不可
まぼろし読み
Read Uncommited
かもしれない
かもしれない
かもしれない
Read Commited
あり得ない
かもしれない
かもしれない
Repeatable Read
あり得ない
あり得ない
かもしれない
Serializable
あり得ない
あり得ない
あり得ない