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