ファントムリーディングとは何ですか?
ファントムリードとは、トランザクション A が条件付きインデックスに基づいて N 個のデータを取得し、その後トランザクション B がその N 個のデータ以外の M 個のデータを変更または追加する M 個のデータを意味します。その結果、トランザクション A が再検索して N M 個のデータが見つかり、ファントム リードが発生します。
ファントム・リーディングを解決するにはどうすればよいですか?
ネクストキーロックで解決しました。
ファントム読み取りの理由は、行ロックでは行のみをロックできますが、新しいレコードを挿入するときに更新する必要があるのはレコード間の「ギャップ」であるためです。したがって、ファントム読み取りを解決するために、InnoDB はギャップ ロックを導入します。
ギャップ ロック ギャップ ロックは反復読み取りレベルでのみ有効です
ギャップ ロックと行ロックは総称してネクスト キー ロックと呼ばれます。 next-key ロックは、開いた間隔と閉じた間隔です。
データベースに定義されている 4 つの分離レベルのうち、
最も高い分離レベル SERIALIZABLE_READ では、ファントム読み取りの問題が発生しないことが保証されます。
Repeatable Read (RR)
現在の読み取りでは、RR 分離レベルにより、読み取りレコードがロック (レコード ロック) され、読み取り範囲がロックされることが保証されます。 . 、クエリ条件を満たす新しいレコードは挿入できません (ギャップ ロック)、ファントム リード現象はありません。
推奨チュートリアル: 「MySQL チュートリアル 」
以上がファントムリーディングとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。