データベース分離の 4 つのレベルは次のとおりです: 1. コミットされていないコンテンツの読み取り、2. 送信されたコンテンツの読み取り、3. 再読み取り可能、4. シリアル化可能。異なるロックタイプを使用して分離レベルが実装されているため、同じデータを読み込むとダーティリードやファントムリードなどの問題が発生する可能性があります。
#この記事の動作環境: Windows 7 システム、Dell G3 コンピューター、mysql8。
データベース分離の 4 つのレベルは次のとおりです。
Read Uncommitted (コミットされていないコンテンツの読み取り)
この分離レベルでは、すべてのトランザクションは、コミットされていない他のトランザクションの実行結果を確認できます。この分離レベルは他のレベルと比べてパフォーマンスがそれほど優れていないため、実際のアプリケーションではほとんど使用されません。コミットされていないデータの読み取りは、ダーティ リードとも呼ばれます。Read Committed (コミット内容の読み取り)
これは、ほとんどのデータベース システムのデフォルトの分離レベルです (ただし、MySQL のデフォルトではありません)。これは分離の単純な定義を満たしています。つまり、トランザクションはコミットされたトランザクションによって行われた変更のみを確認できます。この分離レベルは、いわゆる非反復読み取りもサポートします。これは、同じトランザクションの他のインスタンスがインスタンスの処理中に新しいコミットを持つ可能性があるため、同じ選択が異なる結果を返す可能性があるためです。Repeatable Read
これは、MySQL のデフォルトのトランザクション分離レベルです。同じトランザクションの複数のインスタンスが同じデータ行にデータを同時に読み取ることが保証されます。ただし、理論的には、これはファントム リード (ファントム リード) という別のやっかいな問題につながります。簡単に言えば、ファントム読み取りとは、ユーザーが特定の範囲のデータ行を読み取るときに、別のトランザクションがその範囲に新しい行を挿入することを意味します。ユーザーが範囲内のデータ行を再度読み取ると、新しい「ファントム」があることがわかります。わかりました。 InnoDB および Falcon ストレージ エンジンは、マルチバージョン同時実行制御 (MVCC、Multiversion Concurrency Control) メカニズムを通じてこの問題を解決します。Serializable
これは最高の分離レベルです。トランザクションが互いに競合しないように強制的に順序付けすることで、ファントム読み取りの問題を解決します。つまり、読み取られた各データ行に共有ロックが追加されます。このレベルでは、多数のタイムアウトやロック競合が発生する可能性があります。分離レベルによって引き起こされる問題
これら 4 つの分離レベルは、異なるロック タイプを使用して実装されており、同じデータが読み取られると、この問題が発生しやすくなります。例:ダーティ リード:
トランザクションがデータの一部を更新し、この時点で別のトランザクションが同じデータの一部を読み取りました。そのため、以前の RollBack 操作が実行されると、後続のトランザクションによって読み取られるデータが正しくなくなります。Non-repeatable read:
トランザクションの 2 つのクエリ間でデータに一貫性がありません。これは、2 つのクエリ間の挿入が原因である可能性があります。トランザクションは元のデータを更新します。データ。Phantom Read:
トランザクションの 2 つのクエリのデータ項目の数が一致していません。たとえば、1 つのトランザクションはデータの複数の列 (行) をクエリします。しかし、別のトランザクションがこの時点でいくつかの新しいデータ列を挿入したため、前のトランザクションの後続のクエリでは、以前には存在しなかったデータ列がいくつかあることがわかります。 MySQL では、これら 4 つの分離レベルが実装されており、発生する可能性のある問題は次のとおりです。ダーティ リード | 反復不可能な読み取り | ||
√ | √ | √ | |
XX | √ | √ | |
XX | XX | √ | |
XX | XX |
概要: 以上です これがこの内容のすべてですこの記事が皆さんのお役に立てば幸いです。
[推奨コース: MySQL チュートリアル ]
以上がデータベース分離の 4 つのレベルとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。