ダーティ リードとは何ですか?
ダーティ読み取り (無効なデータの読み取りとも呼ばれます) は、データベース アクセス中にトランザクション T1 が特定の値を変更し、その後トランザクション T2 がその値を読み取り、その後 T1 が一部の変更をキャンセルすることを意味します。この値を変更すると、T2 によって読み取られたデータが無効になります。ダーティ読み取りは通常、更新操作を対象としていることに注意してください。
解決策
MySQL データベースは 4 つの分離レベルを定義します。
シリアル化可能: 可能ダーティ読み取り、反復不可能な読み取り、仮想読み取りを避けてください。
反復可能な読み取り: ダーティ リードや反復不可能な読み取りを回避できます。
注: トランザクションの分離レベルはデータベースによって制限されており、異なるデータベースでサポートされる分離レベルは必ずしも同じではありません。 ## ダーティ リード: 変更 排他ロックを追加する場合、トランザクションがコミットされるまで解放されません。読み取り時に共有ロックを追加した後 (トランザクション 1 がデータを読み取る間、他のトランザクションがデータを変更しないようにするため)、トランザクションは存在しませんデータに対する操作が許可されています。読み取りのみが可能です。トランザクション 1 に更新操作がある場合、それは排他ロックに変換され、他のトランザクションは読み取りと書き込みに参加する権利を持ちません。これにより、トランザクション 1 に更新操作が行われなくなります。ダーティ リードの問題 しかし、トランザクション 1 がデータを読み取るとき、他のトランザクションもデータを読んでいる可能性があります。読み取りが完了すると、共有ロックが解放されます。このとき、トランザクション 1 は、データを取得し、変更後にトランザクションをコミットします。他のトランザクションが再度データを読み取り、データに矛盾があることが判明すると、反復不可能なエラーが発生します。読み取りの問題があるため、反復不可能な読み取りの問題を回避することはできません。
異なる分離レベルを実行すると、さまざまな問題が発生する可能性があります。以下にそれらを要約し、例を示して説明します。
ダーティ リードは、あるトランザクション A が、別のトランザクション B によって変更されたがまだコミットされていないデータを読み取るときに発生します。 B がロールバックすると、トランザクション A は無効なデータを読み取ります。これは反復不可能な読み取りに似ていますが、2 番目のトランザクションをコミットする必要はありません。
推奨チュートリアル: 「PHP チュートリアル 」 「
MySQL チュートリアル 」
以上が汚い読書とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。