MySQL 分離レベルの詳細な説明と例

MySQL 分離レベルの詳細な説明と例

物事の分離レベルは知っているが、一度も操作したことがない。

ダーティ リード: トランザクションがデータの一部を更新し、別のトランザクションがこの時点で同じデータを読み取ります。何らかの理由で、前のトランザクションが操作をロールバックしたため、後者のトランザクションによって読み取られたデータは不正確になります。

反復不可能な読み取り: トランザクション内の 2 つのクエリ間でデータが矛盾しています。これは、トランザクションが 2 つのクエリ間で元のデータを更新したことが原因である可能性があります。

ファントム リード: トランザクションの 2 つのクエリのデータ エントリ数が一致しません。たとえば、1 つのトランザクションが複数のデータ列をクエリし、別のトランザクションが同時に複数の新しいデータ列を挿入します。次のクエリでは、前のトランザクションが以前にはなかった複数のデータ列を見つけます。

MySQL の 4 つの分離レベル

コミットされていないデータの読み取り: コミットされていないデータを読み取る: どちらの問題も解決されない
コミットされたデータの読み取り: コミットされたデータの読み取り: ダーティリードを解決できます ---- Oracle のデフォルト
繰り返し読み取り: 再読み取り読み取り: ダーティリードと非繰り返し読み取りを解決できます - MySQL デフォルト
シリアル化可能: シリアル化: ダーティリード、非反復リード、仮想リードを解決できます。これはテーブルをロックするのと同等です。

トランザクション分離レベルダーティリード繰り返し不可能な読み取りファントムリード
読み取り未コミットはいはいはい
繰り返し不可能な読み取り (読み取りコミット)いいえはいはい
繰り返し読み取りいいえいいえはい
シリアル化可能いいえいいえいいえ

データ テーブルを作成します。

テーブル shuzhi を作成する
(
  id mediumint(8) 主キー、
  名前varchar(30),
  shuzhi mediumint(10)
);
テーブル shuzhi を変更します。engine=innodb;
shuzhi に値 (1,'aa',1000) を挿入します。
shuzhi に値 (2,'bb',2000) を挿入します。
shuzhi に値 (3,'cc',3000) を挿入します。
shuzhi に値 (4,'dd',4000) を挿入します。
shuzhi に値 (5,'ee',5000) を挿入します。
shuzhi に値 (6,'ff',6000) を挿入します。
shuzhi に値 (7,'gg',7000) を挿入します。
shuzhi に値 (8,'hh',8000) を挿入します。

トランザクションの4つの分離レベルのテストを開始します。最初のレベル: コミットされていない読み取り

分離レベルの設定

#現在の分離レベルを照会する SELECT @@tx_isolation
#分離レベルを設定する セッショントランザクション分離レベルを設定する [分離レベル]
セッショントランザクション分離レベルをコミットされていない読み取りに設定

まず最初のプロセスを開始し、まだクエリを実行せずにトランザクションを開始します。

ウィンドウ 1
トランザクションを開始します。

次に2番目のプロセス(ターミナル)を開きます
まずトランザクションを開いて、コミットせずにレコードを変更します

ウィンドウ 2
トランザクションを開始します。
shuzhi を更新します。id=7 の場合、shuzhi='8888' を設定します。

データベースにアクセスしてクエリを実行すると、id=7 の値がまだ 7000 であり、値は変更されていないことがわかります。

ここに画像の説明を挿入

このレコードを照会するにはウィンドウ 1 に移動します

ウィンドウ 1
トランザクションを開始します。
shuzhi から * を選択 (ID=7)

ここに画像の説明を挿入

読み取られたデータは7000ではなくウィンドウ2で送信されたデータであることが判明した。

これで、MySQL 分離レベルの詳細と例に関するこの記事は終了です。MySQL 分離レベルの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの4つの分離レベルについての深い理解
  • MySQL の 4 つのトランザクション分離レベルの詳細な説明
  • MySQL 分離レベル操作プロセスの詳細説明 (cmd)
  • MySQL の 4 つのトランザクション分離レベルを例を使って分析する
  • MySQL トランザクション分離レベルの原則例分析
  • MySQLにおけるトランザクション分離レベルの実装原理の詳細な説明

<<:  Select はダブルクリック dbclick イベントをサポートしていません

>>:  CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

推薦する

HTML タグのメタ概要、HTML5 のヘッド メタ属性の概要

序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...

デスクトップ仮想化を実現するために Hyper-V を展開する手順 (グラフィック チュートリアル)

Hyper-V を展開するためのハードウェア要件は次のとおりです。 64 ビット プロセッサ、具体...

モバイルページで縦画面を強制する方法

最近、仕事でモバイルページを作成しました。もともと特別なことではありませんでしたが、非常に奇妙に感じ...

Linux における nohup と & の使い方と違いの詳細な説明

例:例として、Python コード loop_hello.py を使用します。このコードは、ループ回...

Docker 学習: コンテナ コンテナの具体的な使用方法

コンテナは Docker のもう一つの中心的な概念です。簡単に言えば、コンテナとは、独立して実行され...

Vue 値転送の 12 の方法の概要

目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...

JS変数ストレージのディープコピーとシャローコピーの詳しい説明

目次可変タイプとストレージスペーススタックメモリとヒープメモリ基本的なデータ型参照タイプグラフィック...

CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)

KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...

JS で美しい条件式を書く方法についての簡単な説明

目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...

Nginx プロセス スケジューリングの問題の詳細な説明

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...

よくある HTML タグの記述エラー

HTML Police がコードを調べて意味のないタグをすべて見つけ出すので、注意を払う必要がありま...

TypeScriptのインデックスシグネチャの理解に関する簡単な説明

目次1. インデックス署名とは何ですか? 2. インデックス署名構文3. インデックス署名に関する注...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

進捗バーのネイティブ JavaScript 実装

進捗バーを実装するためのJavaScriptの具体的なコードは参考までに。具体的な内容は次のとおりで...