Mysql トランザクション分離レベルの読み取りコミットの詳細な説明

Mysql トランザクション分離レベルの読み取りコミットの詳細な説明

MySQL トランザクション分離レベルを表示する

mysql> '%isolation%' のような変数を表示します。
+---------------+----------------+
| 変数名 | 値 |
+---------------+----------------+
| tx_isolation | READ-COMMITTED |
+---------------+----------------+
セット内の 1 行 (0.00 秒)

現在のトランザクション分離レベルがREAD-COMMITTEDであることがわかります。

現在の分離レベルでのトランザクション分離の詳細を確認し、2 つのクエリ ターミナル A と B を開いてみましょう。

以下に注文表があります。初期データは次のとおりです。

mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 1 |
+----+--------+
セット内の 1 行 (0.00 秒)

最初のステップは、A と B の両方でトランザクションを開始することです。

mysql> トランザクションを開始します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

2番目のステップは、2つの端末の数値を照会することです


 mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 1 |
+----+--------+
セット内の 1 行 (0.00 秒)

B

 mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 1 |
+----+--------+
セット内の 1 行 (0.00 秒)

3番目のステップは、Bの数字を2に変更しますが、トランザクションをコミットしません。

mysql> `order` を更新し、number=2 を設定します。
クエリは正常、1 行が影響を受けました (0.00 秒)
一致した行: 1 変更された行: 1 警告: 0

ステップ4: Aの値を照会する

mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 1 |
+----+--------+
セット内の 1 行 (0.00 秒)

A の値は変更されていないことがわかります。

ステップ5: トランザクションBを送信し、Aの値を再度照会する

B

mysql> コミット;
クエリは正常、影響を受けた行は 0 行 (0.01 秒)


mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 2 |
+----+--------+
セット内の 1 行 (0.00 秒)

Aの値が変わったことが分かります

ステップ 6. A でトランザクションをコミットし、A と B の値を再度照会します。


mysql> コミット;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 2 |
+----+--------+
セット内の 1 行 (0.00 秒)

B

mysql> `order` から * を選択します。
+----+--------+
| ID | 番号 |
+----+--------+
| 13 | 2 |
+----+--------+
セット内の 1 行 (0.00 秒)

AとBの値が2に変更されていることがわかります。

ここに簡単な概略図があります


トランザクション分離レベルが Read Committed の場合、B のトランザクションがコミットされた後、A がコミットされていなくても、B トランザクションのコミットの結果を読み取ることができることがわかります。これにより、ダーティ リードの問題が解決されます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL トランザクション分離レベルの詳細
  • MySQL トランザクション分離レベルとロックメカニズムの問題に関する深い理解
  • MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離
  • MySQL トランザクション分離レベルの原則例分析
  • MySQLトランザクションの4つの分離レベルについての深い理解

<<:  CentOS 8 Zabbix 4.4 インストール ガイド

>>:  Vue の foreach 配列と js の traversal 配列の書き方の説明

推薦する

MySqlサブクエリINの実装と最適化

目次IN が遅いのはなぜですか? INとEXISTSのどちらが速いでしょうか?効率を向上させるにはど...

Tomcat を使用して Centos 環境に SpringBoot WAR パッケージをデプロイする

戦争パッケージを準備する1. 既存のSpringBootプロジェクトを準備し、pomに依存関係を追加...

HTML で js を使用してローカル システム時間を取得する

コードをコピーコードは次のとおりです。 <div id="名前"> ...

MySQL における explain の役割の詳細な説明

1. MYSQLインデックスインデックス: MySQL がデータを効率的に取得するのに役立つデータ構...

image/x-png の ContentType について

これにより、png ファイルのアップロードも不可能になりました (後で情報を調べたところ、レジストリ...

DockerでJavaプログラムを起動する方法

シンプルなSpring Boot Webプロジェクトを作成するアイデア ツールを使用して、Sprin...

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...

jsを使ってシンプルなディスククロックを実現する

この記事では、参考までに、シンプルなディスククロックを実装するためのjsの具体的なコードを紹介します...

HTML ページをズームアウトした後にスクロール バーを表示するためのサンプル コード

ここでは、HTML ページのサイズを縮小した後に下部にスクロール バーを表示し、スクロール バーをス...

Vueナンバープレート入力コンポーネントの使い方の詳しい説明

参考までに、シンプルなナンバープレート入力コンポーネント(vue)です。具体的な内容は次のとおりです...

Nginx ロードバランシング クラスタの実装

(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...

Docker チュートリアル: コンテナの使用 (簡単な例)

Docker を初めて使用する場合は、コンテナの管理を始めるために習得する必要がある基本的なコマン...

入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論

この2日間、Baixing.comの筆記試験問題を解いているときに、このような問題に遭遇しました。H...

Vue+elementuiはドロップダウンテーブルの複数選択と検索機能を実現します

この記事では、ドロップダウンテーブルの複数選択と検索を実現するためのvue+elementuiの具体...

Linux で nohup ログ出力が大きすぎる問題の解決方法の詳細な説明

最近、hadoop テスト クラスターで spark ストリーミング プログラムを実行し、その後、n...