MySQL 反復読み取り分離レベル (RR レベル) はファントム読み取りを回避できますか

MySQL クライアント A のトランザクション分離レベル (デフォルトは RR レベル) を確認し、
ここに画像の説明を挿入
クライアント A でトランザクションを開始し、trax_learn テーブルを確認します。
ここに画像の説明を挿入
新しいクライアント B を開き、新しいデータを trax_learn テーブルに追加します。
ここに画像の説明を挿入
クライアント A の trax_learn テーブルを再度確認すると、まだ 2 つのレコードしかないことがわかります。
ここに画像の説明を挿入
クライアント A でトランザクションをコミットします。コミットして、再度確認してください。
ここに画像の説明を挿入
クライアント B に挿入されたデータが表示されていることがわかります。これは、クライアント A のトランザクション実行中、テーブル上のクライアント B の操作がクライアント A に影響を与えず、ファントム読み取りを回避していることを示しています。
この状況の主な理由は、通常の select ステートメントがスナップショット読み取りであり、トランザクション A の開始時にそのスナップショット データがバージョンによってロックされていることです。トランザクション A が現在の読み取りに調整されると、ファントム読み取りが発生します。

したがって、InnoDB の RR 分離レベルがファントム読み取りの問題を解決する、または解決しないと言うのは正確ではありません。ファントム・リーディングの問題を完全に解決したわけではないと言わなければなりません。

おすすめ

転載: blog.csdn.net/weixin_45930241/article/details/123533556