違い:
Non-repeatable read: 同じ条件下で、再度読み込むと読み取ったデータの値が変化します。 。
ファントム読み取り:同じ条件でも、1回目と2回目で読み出すレコード数が異なります。
詳細な分析:
1. 反復不可能な読み取り
同じ条件下では、読み取りデータの値は同じになります。もう一度読んでみてください。何かが変わりました。
例:
トランザクション 1 で、A は自分の給与を 1000 と読み取りますが、この時点ではトランザクション 1 の操作は完了しておらず、後で別の同一の読み取りが行われます。
con1 = getConnection(); select salary from employee where employeeName ="A";
トランザクション 2 では、財務スタッフが A の給与を 2000 に変更し、トランザクションを送信しました。
con2 = getConnection(); update employee set salary = 2000 where employeeName = "A"; con2.commit();
トランザクション 1 で、A が自分の給与を再度読み取ると、給与は 2000 になります。
select salary from employee where employeeName ="A";
トランザクション内の 2 つの読み取りの結果に一貫性がなく、反復不可能な読み取りが発生します。
2. ファントム読み取り
同じ条件でも、1 回目と 2 回目で読み出すレコード数が異なります。
例:
現在、給与 1,000 の従業員が 5 人います。
トランザクション 1、給与 1,000 のすべての従業員を読み取り、合計 10 件のレコードを読み取ります。
con1 = getConnection(); Select * from employee where salary =1000;
この時点で、別のトランザクションが従業員テーブルに従業員レコードを挿入し、給与も 1,000 でした。
con2 = getConnection(); Insert into employee(employeeName,salary) values("B",1000); con2.commit();
トランザクション 1 は、給与 1,000 のすべての従業員を再度読み取り、合計6 件のレコードのうちレコードが読み取られ、ファントム読み取りが作成されました。
//con1 select * from employee where salary =1000;
推奨チュートリアル: mysql チュートリアル
以上がファントムリードとノンリピートリードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。