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 配列の書き方の説明

推薦する

カルーセル効果を実現するjQueryプラグイン

毎日jQueryプラグイン - カルーセルチャートを実装するためのjQueryプラグイン。参考までに...

スクロールバーのスタイルを設定するための CSS サンプルコード

スクロール バーのスタイルを設定するための CSS 実装コードは次のとおりです。 •::-webki...

HTML/CSS での空白処理とページ内の空白を保持する方法

HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...

echarts と vue.js を統合する際に発生するいくつかの問題の概要

序文現在、私は Beetlex のデータ分析プラットフォームに取り組んでいます。この製品の開発では、...

複数の値を返す MySQL ストアド プロシージャ メソッドの例

この記事では、例を使用して、MySQL ストアド プロシージャで複数の値を返す方法について説明します...

Docker イメージの最適化 (1.16GB から 22.4MB)

目次最適化の第一歩: 軽量ベースイメージの使用第2段階の最適化:多段階構築Docker は、ソフトウ...

SQL 実践演習: オンライン モール データベースの製品カテゴリ データ操作

オンラインショッピングモールデータベース - 商品カテゴリデータ操作(I)プロジェクトの説明電子商取...

Linux での Nginx 監視の問題

nginxのインストール仮想マシンがインターネットにアクセスできることを確認します。 1. ルートユ...

HTMLフォーム属性のreadonlyとdisabledの使い方

1. readonly 読み取り専用属性なので、値を取得できます2. 無効: 無効な属性、値を取得で...

Vue での keepAlive の使用例の詳細な説明

開発においては、一覧から詳細ページにジャンプし、また詳細ページに戻る際に一覧ページの状態(スクロール...

Docker View プロセス、メモリ、カップ消費量

Docker プロセス、メモリ、カップ消費量を表示dockerコンテナを起動し、dockerinsp...

MySQL データベースの Binlog 使用法の概要 (必読)

MySQL データベースにとって binlog バイナリ ログがどれほど重要であるかについては詳し...

WeChat アプレット wxs 日付と時刻処理の実装例

目次1. 日付までのタイムスタンプ2. UTCを北京時間に変換するWXS (WeiXin Scrip...

一定時間後にNavicatがデータベースから自動的に切断される問題の解決方法

これは、データベース サーバーが、接続が多すぎるのを避けるために、一定時間非アクティブな状態が続くと...

一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ

目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...