記事ディレクトリ
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 がコミットされた後にのみコミットできます。