定義
- Read uncommitted (コミットされていないコンテンツの読み取り)
Read uncommitted レベルでは、トランザクション内の変更は、コミットされていない場合でも、他のトランザクションに表示されます。トランザクションはコミットされていないデータを読み取ることができます。これはダーティ読み取りとも呼ばれます。このレベルは多くの問題を引き起こす可能性があります。パフォーマンスの点では、Read uncommitted は他のレベルよりもそれほど優れているわけではありませんが、他のレベルの利点の多くが欠けています。よほど必要な理由がない限り、実際のアプリケーションで使用されることはほとんどありません。
- Read commit (コミットされたコンテンツの読み取り)
ほとんどのデータベース システムのデフォルトの分離レベルは、Read commit です (ただし、MySQL は異なります)。コミットされた読み取りは、前述の分離の簡単な定義を満たします。つまり、トランザクションが開始されると、コミットされたトランザクションによって行われた変更のみが表示されます。つまり、トランザクションが最初からコミットされるまでに行われた変更は、他のトランザクションには表示されません。同じクエリを 2 回実行すると異なる結果が生じる可能性があるため、このレベルは非反復読み取りと呼ばれることもあります。
- #Repeatable Read (反復可能読み取り)
Repeatable Read は、ダーティ リードの問題を解決します。このレベルでは、同じトランザクション内で同じレコードを複数回読み取った結果の一貫性が保証されます。ただし、理論的には、反復読み取り分離レベルでは、別のファントム読み取り (ファントム読み取り) の問題を解決することはできません。いわゆるファントム読み取りとは、トランザクションが特定の範囲のレコードを読み取ると、別のトランザクションがその範囲に新しいレコードを挿入し、前のトランザクションがその範囲のレコードを再度読み取ると、ファントム行が生成されることを意味します。 InnoDB および XtraDB ストレージ エンジンは、マルチバージョン同時実行制御 (MVCC) を通じてファントム読み取りの問題を解決します。
反復読み取りは Mysql のデフォルトのトランザクション分離レベルです。InnoDB は主に MVVC を使用して高い同時実行性を実現し、ファントム読み取りを回避するためにネクスト キー ロックと呼ばれる戦略を使用します。
Serializable は最高の分離レベルです。トランザクションを強制的にシリアル化することで、前述のファントム読み取りの問題を回避します。簡単に言うと、Serializable は読み取られたデータのすべての行にロックを追加するため、タイムアウトやロック取得に関する多くの問題が発生する可能性があります。この分離レベルが実際のアプリケーションで使用されることはほとんどありません。このレベルは、データの一貫性を確保することが非常に必要であり、同時実行性の不在が許容される場合にのみ考慮する必要があります。
#分離レベルANSI SQL92 P68-69
レベル (分離レベル)
ダーティ リード |
Non-repeatable read |
Phantom |
|
コミットされていない読み取り (コミットされていないコンテンツを読み取る)
✓ |
✓ |
✓ |
|
コミットされたコンテンツの読み取り (コミットされたコンテンツの読み取り)
|
#✓ |
✓ |
|
繰り返し読み取り
× |
× |
✓ |
|
シリアル化可能
|
#× |
× |
|
推奨される研究: "
mysql ビデオ チュートリアル " ##
以上がSQL92 標準の 4 つの分離レベルを要約するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。