MySQL 分離レベル操作プロセスの詳細説明 (cmd)

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り

1. 2 つの MySql コマンド プロンプト ラインを開き、同じデータベースを入力して、現在のテーブルの内容が次のように同じデータであることを確認します。

2. 両端AとBでselect @@tx_isolationを実行し、現在のデフォルトの分離レベルを確認すると、両方とも

繰り返し可能読み取り - 繰り返し可能読み取り - (現在のトランザクション内で最初に読み取られたデータを繰り返し読み取ることを繰り返し可能読み取りと呼びます。)

3. エンド A の分離レベルを readuncommitted (コミットされていない読み取り) に変更します。つまり、他の人が送信していないデータを読み取ることができるということです。

トランザクション分離レベルをコミットされていない読み取りに設定します。

緑色のMySql5.5で、以下を実行してください。

セッショントランザクション分離レベルをコミットされていない読み取りに設定します。

次に、変更が行われたかどうかを確認します。

4. 両端AとBでトランザクションを開始する

トランザクションを開始します。

5. B 側のデータ行を次のように変更します。

id=1 のスタッド setname='Jhon' を更新します。

次に、サイド A でクエリを実行します: select * from stud;

6. このとき、B側は再度ロールバック操作を実行する。

ロールバック;

次に、エンド A でクエリを実行し、データが前のデータに戻っていることを確認します。これはダーティリードです:

7. B 側で書き込まれた新しいデータについては、送信されていない場合は、A 側からクエリすることもできます。これをファントム リードと呼びます。

コミットされた操作プロセスの読み取り: -read COMMITTED

1. A と B が一貫しているかどうかを確認します。

2. エンド A (左) の分離レベルを readcommitted に変更します。

トランザクション分離レベルをコミット読み取りに設定します。

サイド A でトランザクションを開始します。

トランザクションを開始します。

B側で取引を開始する

3. エンド A のクエリ:

* fromstudを選択します。

B側のレコードの行を変更して送信する

id=1 のスタッド setname='itcast' を更新します。

エンド A に戻ってクエリを実行し、同じトランザクション内の 2 つのクエリの結果が異なることを確認します。

繰り返し読み取りの例

1. エンド A の分離レベルが繰り返し読み取りであるかどうかを確認します。

@@tx_isolation を選択します。

2. オープントランザクションの A 側での最初のクエリ。

次に、B 側のデータベースの内容を変更します。

最後に、エンド A の同じトランザクションで再度クエリを実行し、結果が一貫していることを確認します。

シリアル化可能は最高レベルの分離です

1. A端の分離レベルをSerializableに設定する

トランザクション分離レベルをシリアル化可能に設定します。

A 側でトランザクションを開き、スタッド テーブルをクエリします。

B 側でトランザクションを開き、レコードの行を書き込みます。この時点で、B のコードは実行される前に A の送信を待機しているため、実行されていないことがわかります。

スレッド同期の概念に似ている

これら 4 つの分離レベルは異なるロック タイプを使用して実装されており、同じデータが読み取られると問題が発生する可能性があります。例えば:

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

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

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

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

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

<<:  Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT

>>:  Vue で棒グラフを使用し、自分で設定を変更する方法

推薦する

Vue+el-tableはセルの結合を実現します

この記事の例では、参考までにセルの結合を実現するためのel-tableの具体的なコードを共有していま...

Reactは無限ループスクロール情報を実装する

この記事では、無限ループスクロールを実現するためのReactの具体的なコードを参考までに紹介します。...

MySQL 8.0.23 のレプリケーション アーキテクチャにおけるスレーブ ノードの自動フェイルオーバー

私はしばらく MGR と連絡を取り合ってきました。MySQL 8.0.23 の登場により、MySQL...

忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...

Vue+Openlayer をベースに geojson を動的に読み込む方法

1つ以上の機能をロードする <テンプレート> <div id="map&...

一目でわかる$nextTickの説明

目次1. 機能説明2. 親コンポーネント3. サブコンポーネント NextTick.vue 4なぜ未...

Linux が Sudo 権限昇格の脆弱性を公開、どのユーザーでも root コマンドを実行可能

Linux で最も一般的に使用される重要なユーティリティの 1 つである Sudo は、ほぼすべての...

Ubuntu 16.4 で完全に分散された Hadoop 環境を構築するための実践的なチュートリアル

序文この記事は主にubantu 16.4 Hadoop完全分散構築に関する関連コンテンツを紹介し、皆...

JavaScript メッセージ ボックスの例

JavaScript では、警告ボックス、確認ボックス、プロンプト ボックスの 3 種類のメッセージ...

Dockerコンテナの自動終了を停止する方法の詳細な説明

この記事では、Docker コンテナとフロントエンド プロセスの関係と、コンテナを永続的に実行できる...

HTML要素にフォーカスを設定する方法

コードをコピーコードは次のとおりです。 <本文<フォームアクション="&quo...

HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

水平方向では、テーブル ヘッダーの配置を左、中央、右に設定できます。基本的な構文<TH ALI...

Web ページは何ピクセルで設計すればよいでしょうか?

多くのウェブデザイナーは、ウェブページのレイアウトを設計する際に、インターフェースウェブページの幅に...

easycomモードでUNI-APPコンポーネントを呼び出す際に習得する必要がある実践的なスキル

この記事は議論の出発点となることを目的としています。詳細なドキュメントと easycom の仕様につ...

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...