トランザクション分離レベル、ダーティリード、マジックリード、繰り返し不可の読み取り

トランザクション分離レベル、ダーティリード、マジックリード、繰り返し不可の読み取り

汚い読書

ダーティーリードとは、トランザクションがデータにアクセスしていて、データが変更され、変更がコミットされていない場合、データが読み取られ、別のトランザクションによって使用されることを意味します。これはダーティーリードです。

たとえば、Zhang Sanの給与は200で、トランザクションAはZhang Sanの給与を300に変更しますが、トランザクションAが送信されない場合、トランザクションBはZhang Sanの給与データを読み取り、次にトランザクションAエラーをロールバックする方法を示します。この場合、トランザクションBによってフェッチされるデータは、存在しないデータ、つまりガベージデータと同等です。

繰り返し不可

繰り返し不可の読み取り。つまり、トランザクションAが同じデータを複数回読み取るが、トランザクションはまだ終わっておらず、別のトランザクションBもこのデータにアクセスしますが、トランザクションBがデータを変更した場合、トランザクションA複数回読み込んだデータは一致しません。同じデータでも値が異なります。複数回読み込んだデータが異なるため、ノンリピータブル読み込みと呼びます

たとえば、Zhang Sanの給与を読み取るトランザクションAが200で、2番目の給与データを読み取ることを計画しており、トランザクションBが給与を300に変更すると、トランザクションAで読み取ったデータに一貫性がなくなり、結果として繰り返し読むことはできません。

ファントムリーディング

ファントム読み取りとは、トランザクションAがテーブル内のすべてのデータを変更すると、トランザクションBがこの時点でテーブルにデータの新しい行を挿入し、トランザクションAがテーブルを表示したときに、変更されていない別のデータ行があることを検出すると、錯覚があるように見えることを意味します。同じです。

たとえば、給与が200の10人のユーザーがいるとします。トランザクションAが合計10を読み取り、次にトランザクションBが従業員の情報を挿入し、給与も200になります。トランザクションAが短時間で1秒実行する場合2回目の読み取りでは、2つの矛盾した結果が生じます。結果が正しいかどうかはわかりません。

注意:

反復不可能読み取りの鍵は変更です。

同じデータ、最初に読み取られた値と2回目に読み取られた値は、短時間で矛盾します。

ファントムリーディングの焦点は、追加と削除です。

そのような問題を解決する方法

データベース開発ロックメカニズムは、同時アクセス時のこれらの問題を解決します。ロックされたさまざまなオブジェクトに応じて、ロックは行レベルのロックとテーブルレベルのロックに分けられます。同時トランザクションロックの関係に従って、ロックは共有ロックと排他ロックに分けられます。共有ロックは、排他ロックを防止しますが、共有は許可します。排他ロックは、共有ロックおよびその他の排他ロックを防止するためのものです。同時実行中にデータを安全に変更できるようにするために、データベースは、変更された行に排他ロックを追加し、クエリステートメントを追加、削除、および変更する必要があります必要な行ロックを暗黙的に採用します。

ロックメカニズムの管理は非常に複雑であるため、ロックメカニズムに基づいて、データベースはさまざまなトランザクション分離レベルをユーザーに提供します。ユーザーは書店の分離レベルをカスタマイズでき、データベースはさまざまなレベルに従って適切なロックを自動的に選択します。

トランザクション分離レベルとデータベースの同時実行性のパフォーマンスは反比例し、分離レベルが高いほど同時実行性は低くなります。

トランザクション分離レベル

mysqlデータベースにデフォルトで実装されている分離レベルはRepeatable(反復可能読み取り)です。

mysqlで4つの分離レベルをサポートします。OracleはSerializeble(シリアル化)とコミットされた読み取り(コミットされた読み取り)の2つのレベルのみをサポートし、デフォルトは後者です。

トランザクションの4つの特性:原子性(実行は個々のユニットに基づく)、一貫性(すべての成功または失敗)、分離(トランザクションの実行、干渉なし)、持続性(データベースのトランザクションの変更)他の変更の影響を受けずに常に存在します);

コミットされていない読み取り(コミットされていない読み取り)

トランザクションが一部のデータを書き込むとき、別のトランザクションはこのデータに同時に書き込むことはできません。このときの状態は読み取り専用であり、データの送信が自分で変更されないように、排他的な書き込みロックによって実現されますデータ。ただし、送信されない場合は変更されたデータが読み取られるため、データが決定されない場合、テストデータが読み取られて使用され、ダーティリーディングが発生します。

不足している更新を解決しましたが、ダーティリードが引き続き発生する可能性があります

コミットして読む

このレベルは、トランザクションが読み取り専用操作であり、他のトランザクションが読み書きできる場合ですが、書き込みトランザクションの場合、ダーティリードを回避するために他のトランザクションの読み書きを禁止しますが、操作が繰り返されない場合があります。同じデータを複数回読み取る場合、最初にデータが読み取られ、途中で別のデータが挿入されて書き込まれます。トランザクション1にはアクセスできません。トランザクション1が2回目にデータにアクセスすると、データが2回変更されますデータに一貫性がないため、読み取りが繰り返されません。

このレベルでは、トランザクションの書き込み中にデータの一部がロックされますが、トランザクションが複数の読み取りを実行すると、繰り返し不可の読み取りが発生します。

更新を失い、ダーティ・リードの問題を解決

反復可能読み取り(反復可能読み取り)

3番目のレベルは、トランザクションが同じデータを複数回繰り返し読み取ると、反復不能な読み取りが発生することです。これは、トランザクションの複数の読み取り中に、他のトランザクションがデータにアクセスできないことを規定します。読み取りトランザクションは書き込みトランザクションを禁止し、読み取りトランザクションは許可されます。読み取りと書き込みを行いますが、魔法の読み取りが発生する可能性があります。このレベルでは書き込み操作は禁止されていますが、データの追加と削除は可能です。これにより、魔法の読み取りが発生します。

更新を解決することは、ダーティリード、非反復可能読み取りを失っているが、魔法の読書があるでしょう

シリアライズ可能

このレベルでは、トランザクションのシリアル化が必要です。トランザクションは1つずつしか実行できず、同時に実行することはできません。シリアル化は行レベルのロックでは実現できません。新しく挿入されたデータがクエリ操作を実行するトランザクションによってアクセスされないことを他のメカニズムで保証する必要があります。レベルは最高のトランザクション分離レベルであり、価格は低パフォーマンスです。

更新が失われた解決、ダーティリード、反復不能読み取り、ファントムリード(ダミーリード)

(外部チェーン画像の転送に失敗しました。ソースサイトに盗難防止チェーンメカ​​ニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-7DdOnsrv-1587289330743)(C:\ Users \ Samsung \ Desktop \ databaseインタビューの質問\ images \ 2019052019551758.png) ]

欠落している更新、ダーティリード、繰り返し不可のリード、ファントムリード(仮想リード)の解決**

ここに画像の説明を挿入

元の記事5件を公開 賞賛された4件 訪問17件

おすすめ

転載: blog.csdn.net/qq_45218334/article/details/105618884