Mysql データベース トランザクションのダーティ リード、反復不可、ファントム リードの詳細な説明

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

  • read-uncommitted: ダーティ リード、繰り返し不可能なリード、ファントム リードはすべて発生する可能性があります。低セキュリティ、高パフォーマンス。
  • read-committed(オラクルのデフォルト): 再現不可能なファントム読み取り。ダーティ リードは回避されます。
  • repeatable-read(mysql のデフォルト): ファントム読み取り。ダーティ リードと非再現性が回避されます。
  • serializable処置: ダーティ・リード、反復不可能なファントム・リードを避けてください。高セキュリティ、低パフォーマンス。

2 ダーティリード

2 つのウィンドウを開きます。

  • クエリ トランザクションの既定の分離レベル
 select @@transaction_isolation;
  • 分離レベルをread-uncommitted
set session transaction isolation level read uncommitted;

ここに画像の説明を挿入

  • 取引を開く
 start transaction;

ここに画像の説明を挿入

  • ダーティ リードとは、他のトランザクションからコミットされていないデータを読み取ることを意味します。read-uncommitted.
  • データのクエリ時にエラーが発生します。

3 非再現性

  • トランザクション分離レベルをread-committed
set session transaction isolation level read committed;

3.1 ダーティ リーディングの問題を解決しました。

ここに画像の説明を挿入

3.2 非再現性の問題がある

ここに画像の説明を挿入

4 ファントムリーディング

  • 分離レベルを設定する
set session transaction isolation level repeatable read;

4.1 ダーティ リードおよび反復不可能なリードの問題がない

ここに画像の説明を挿入

4.2 幻読の問題

ここに画像の説明を挿入

5 シリアライズ可能

トランザクション分離レベルが設定されている場合serializable、ダーティ リード、反復不可能なリード、ファントム リードの問題は存在しませんが、パフォーマンスは最も低くなります。

set session transaction isolation level serializable;

シリアル化: トランザクションが並行している場合、トランザクション B は、トランザクション A がコミットされた後にのみコミットできます。

おすすめ

転載: blog.csdn.net/weixin_43684214/article/details/130038245