違い: 非反復読み取りの焦点は変更であり、同じ条件下で 1 回目と 2 回目に読み取られる値は異なります。ファントム読み取りは追加または削除に重点が置かれており、同じ条件でも 1 回目と 2 回目で読み出されるレコード数が異なります。制御の観点から見ると、非反復読み取りでは条件を満たすレコードのみをロックする必要がありますが、ファントム読み取りでは条件を満たすレコードおよび類似のレコードをロックする必要があります。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
洗練された説明:
非再現読み取りの焦点は変更です:
同じ条件で読み取ったデータを再度読み込むと値が違っていた
ファントム読み取りの焦点は追加または削除です
同じ条件その1 2回目と2回目で読み出したレコード数が異なる
#もちろん、全体の結果から見ると、2回の読み出し結果は矛盾しているように見えます。ただし、制御の観点から見ると、この 2 つの違いは比較的大きくなります。##前者の場合、条件を満たすレコードのみをロックする必要があります#前者の場合後者では、条件を満たすレコードと類似のレコードをロックする必要があります。
1) 「不可」 「繰り返し読み取り」とは、トランザクション内で同じデータを複数回読み取ることを指します。このトランザクションが終了する前に、別のトランザクションも同じデータにアクセスします。その後、最初のトランザクションの 2 回のデータ読み取りの間で、2 番目のトランザクションの変更により、最初のトランザクションで 2 回読み取られたデータが異なる可能性があります。このように、トランザクション内で 2 回読み取られるデータは異なるため、Non-Repeatable Read と呼ばれます。たとえば、編集者は同じ文書を 2 回読みますが、その合間に作成者が文書を書き直します。編集者が文書をもう一度読むと、文書は変更されています。生の読み取りは再現できません。この問題は、編集者が作成者が書き終えた後にのみドキュメントを読み取ることができる場合に回避できます。この状況を回避するには、通常、set tranisolation levelrepeatable read を使用して分離レベルを設定します。テーブル T のデータを 2 回読み取るときに、トランザクション B がテーブル T のデータを変更しようとすると (詳細はトランザクション A がデータを読み取るときです)、トランザクション A がコミットするまでブロックされます。これにより、トランザクション A によって 2 回読み取られたデータの整合性が保証されます。
2) ファントム読み取りとは、トランザクションが独立して実行されない場合に発生する現象を指します。たとえば、最初のトランザクションはテーブル内のデータを変更しますが、この変更にはテーブル内のすべてのデータ行が含まれます。同時に、2 番目のトランザクションもこのテーブルのデータを変更し、この変更により新しいデータの行がテーブルに挿入されます。その後、最初のトランザクションを操作するユーザーは、あたかも幻覚が起こったかのように、テーブル内にまだ変更されていないデータ行が存在することに気づくでしょう。たとえば、編集者が作成者によって送信されたドキュメントを変更しますが、プロダクションがその変更をドキュメントのマスター コピーにマージすると、作成者が新しい未編集の内容をドキュメントに追加したことがわかります。この問題は、編集者と制作部門が元のドキュメントの作業を完了するまで、誰もドキュメントに新しい内容を追加できないようにすれば回避できます。関連する無料学習の推奨事項:
mysql ビデオ チュートリアル以上がノンリピータブルリードとファントムリードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。