ホームページ >データベース >mysql チュートリアル >ダーティ リード、ファントム リード、ノンリピータブル リードの違いは何ですか?
ダーティ リード、ファントム リード、ノンリピータブル リードの違い: 1. ダーティ リードとは、トランザクションがデータにアクセスしており、データが変更されることを意味します。2. ノンリピータブル リードとは、トランザクション内で読み取りが行われることを意味します。 3. ファントムリードとは、トランザクションが独立して実行されない場合に発生する現象を指します。
[関連する学習の推奨事項: mysql チュートリアル ]
ダーティ リーディング、ファントム リーディング、非反復読み取りの違い:
1. ダーティー リーディング: ダーティー リーディングとは、トランザクションがデータにアクセスしているとき、およびデータはまだデータベースにコミットされていません。この時点では、別のトランザクションもデータにアクセスし、そのデータを使用します。
2. 反復不可能な読み取り: は、トランザクション内で同じデータを複数回読み取ることを指します。このトランザクションが終了する前に、別のトランザクションも同じデータにアクセスします。そして、最初のトランザクションで読み取られた 2 つのデータの間で、2 番目のトランザクションの変更により、最初のトランザクションで 2 回読み取られたデータが異なる可能性があります。このように、トランザクション内で 2 回読み取られるデータは異なるため、Non-Repeatable Read と呼ばれます。たとえば、編集者は同じ文書を 2 回読みますが、その合間に作成者が文書を書き直します。編集者が文書をもう一度読むと、文書は変更されています。生の読み取りは再現できません。この問題は、編集者が作成者が執筆を終えた後にのみ文書を読み取ることができるようにすれば回避できます。
3. ファントム リード: とは、トランザクションが独立して実行されない場合に発生する現象を指します。たとえば、最初のトランザクションがテーブル内のデータを変更します。この変更はすべてのデータに影響します。テーブル内の行。同時に、2 番目のトランザクションもこのテーブルのデータを変更し、この変更により新しいデータの行がテーブルに挿入されます。その後、最初のトランザクションを操作するユーザーは、あたかも幻覚が起こったかのように、テーブル内にまだ変更されていないデータ行が存在することに気づくでしょう。たとえば、編集者が作成者によって送信されたドキュメントを変更しますが、プロダクションがその変更をドキュメントのマスター コピーにマージすると、作成者が新しい未編集の内容をドキュメントに追加したことがわかります。この問題は、編集者と制作部門が元のドキュメントの作業を完了するまで、誰もドキュメントに新しい内容を追加できないようにすれば回避できます。
補足: メタデータに基づく Spring 宣言型トランザクション:
Isolation 属性は合計 5 つのトランザクション設定をサポートします。詳細は次のとおりです:
DEFAULT はデータベースによって設定された分離レベル (デフォルト) を使用し、分離レベルは DBA のデフォルト設定によって決定されます。
READ_UNCOMMITTED ではダーティ リードが発生します。 -反復可能読み取りおよびファントム読み取り (最も低い分離レベルと高い同時実行パフォーマンス)
READ_COMMITTED 非反復可能読み取りおよびファントム読み取りの問題が発生します (読み取り中の行をロックする)
REPEATABLE_READ はファントム読み取りを生成します (読み取り行をすべてロックします)
SERIALIZABLE はすべての状況が発生しないことを保証します (テーブルをロックします)
非反復読み取りの焦点は変更です:
同じトランザクション内で、2 回読み取られるデータは異なります。
ファントム読み取りの焦点は追加または削除です。
同じ条件でも、1 回目と 2 回目で読み出されるレコード数は異なります
ダーティ リード:
は、2 番目のトランザクションが十分に新しいものではないことを強調しています。
以上がダーティ リード、ファントム リード、ノンリピータブル リードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。