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 ユーザーのホスト属性を素早く変更する方法

MySQL にリモートでログインする場合、使用するアカウントには特別な要件があります。アカウントのデ...

vue+rem カスタムカルーセル効果

vue+remを使用したカスタムカルーセルチャートの実装は参考までに。具体的な内容は以下のとおりです...

JavaScript 組み込みの日付と時刻の書式設定のサンプル コード

1. 基礎知識(日付オブジェクトのメソッド) 😜 getFullYear() は年を表す4桁の数字を...

MySQLデータ遅延ジャンプの問題の解決策

今日は、データベース遅延ジャンプに関する別の典型的な問題を分析しました。このプロセスでは、参考のため...

MySQL 5.7.21 のインストールと設定方法のグラフィックチュートリアル (ウィンドウ)

ウィンドウ環境にmysql5.7.21をインストールします。詳細は次のとおりです。 1. MySQL...

ローカルの Windows リモート デスクトップから Alibaba Cloud Ubuntu 16.04 サーバーに接続する方法

ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....

MySQL 8.0.22 winx64 のインストールと設定のグラフィックチュートリアル

mysql 8.0.22 winx64のインストールと設定のグラフィックチュートリアルは参考までに、...

MySQLカスケードレプリケーションの実装方法の例

いわゆるカスケード レプリケーションでは、マスター サーバーが 1 つのスレーブ サーバーにのみデー...

JavaScript インスタンス オブジェクトでプロトタイプ メソッドをオーバーライドする方法の詳細

目次JavaScriptでは、通常、次のコードのようにクラスを簡単に定義できます。 var サンプル...

クラウド CentOS で Docker リモート サービス リンクを有効にするための実装手順

ここでは、dockerがインストールされたcentosサーバーを紹介し、リモートリンクサービスを開始...

Linux におけるドライバモジュールのパラメータ転送プロセスの分析

ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。 module_param(変数名...

jsでシンプルなパズルゲームを実現する

この記事では、簡単なパズルゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な...

Tomcatのサーバーオプションの詳細な説明

1. 構成デフォルトでは、最初の 2 つはチェックされていないので、チェックする必要があります。 (...

初心者向け入門講座⑧:記事サイトを簡単に作る

前回の投稿では、Web ページの作成方法について説明しました。Web サイトは多くの Web ページ...

Linux で rc.local ファイルがない場合の完璧なソリューション

新しい Linux ディストリビューションには rc.local ファイルがなくなりました。サービス...