[MYSQL] トランザクションの 4 つの分離レベルとは何ですか?

I. 概要

複数のトランザクションが同時に実行されるシナリオにおけるダーティ ライト、ダーティ リード、非反復読み取り、およびファントム リードの理由 この記事では、MySQL が上記の状況の発生をどのように防ぐかについて詳しく紹介します。

以前に学んだことを振り返ると、トランザクションには ACID の 4 つの特徴があり、ここではトランザクションの分離について言及します。分離には、さまざまな分離レベルがあります。異なる分離レベルは、基本的にトランザクションを同時に変更またはクエリします。 -パフォーマンス、信頼性、一貫性、および結果の再現性の間のオフは、動作時に異なります。

InnoDB でサポートされる分離レベルは、SERIALIZABLE、REPEATABLE READ、READ COMMITTED、および READ UNCOMMITTED です。これらの中国語の意味は、直列化可能、反復可能な読み取り、コミットされた読み取り、およびコミットされていない読み取りです。InnoDB のデフォルトの分離レベルは REPEATABLE READ です。これらのトランザクションを 1 つずつ分析しましょう

2、READ UNCOMMITTED (コミットされていない読み取り)

この分離レベルでは、トランザクションは他のものによってコミットされていない値を読み取ることができます。この場合、コミットされていない 2 つのトランザクションは、1 つのトランザクションが読み取るデータの同じ行の値を読み取ることができないため、ダーティ書き込みは発生しません。別のトランザクションのコミットされていない値。この分離レベルでは、ダーティ リード、反復不可能なファントム リードが確実に発生します。

この分離レベルはクエリ操作のみが実行されるシナリオにのみ適用されるため、この分離レベルは基本的に多くの場所で使用されることはないと言えます

3. READ COMMITTED (送信された読み取り)

この分離レベルでは、トランザクションは他のトランザクションとコミットされたデータのみを読み取ることができ、コミットされていないダーティ データを読み取ることはできないため、ダーティ書き込みとダーティ読み取りは発生しませんが、非再現性とファントムが発生します。

理由は非常に単純です。これは複数の読み取り操作を実行し、読み取られたデータが送信されても​​異なる可能性があるため、非再現性が発生します。ファントム読み取りの理由も非常に単純です。範囲クエリを実行すると、他のものが新しいデータを挿入しますデータを取得してコミットします。

4、REPEATABLE READ(反復読み取り)

モノが送信される前に、同じデータが複数回クエリされ、各クエリの値は同じです。この期間中に他のモノがデータを変更して送信したとしても、影響を受けません。これは、InnoDB エンジンのデフォルトの分離レベルでもあります。

この場合、ダーティ読み取り、ダーティ書き込み、および非反復読み取りは発生しません。同じ値を繰り返し読み取ることはできますが、範囲クエリを実行すると異なる数の値が読み取られることは避けられないため、ファントム読み取りが発生する可能性があります。

5、SERIALIZABLE(シリアル化可能)

この分離レベルは比較的単純で失礼です。この分離レベルでは、すべての処理はシリアルにのみ実行でき、同時に実行することはできません。この分離レベルでは、ダーティ書き込み、ダーティ読み取り、反復不可能な読み取り、およびファントム読み取りはすべて勝ちます。起こりませんが、欠点は明らかで、パフォーマンスが非常に悪いです。したがって、この分離レベルは通常の作業ではほとんど使用されません。

おすすめ

転載: blog.csdn.net/wang_qiu_hao/article/details/127860466