ホームページ  >  記事  >  データベース  >  ファントムリードとノンリピートリードの違いは何ですか?

ファントムリードとノンリピートリードの違いは何ですか?

王林
王林オリジナル
2020-06-05 15:28:019801ブラウズ

ファントムリードとノンリピートリードの違いは何ですか?

違い:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。