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())

推薦する

各 Nginx プロセスで開くことができるファイルの最大数を設定する方法

1. システム内で開いているファイルの最大数を確認する #現在のリソース制限設定を表示する ulim...

ECMAScript のイテレータの詳細な説明

目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

Nginx Httpモジュールシリーズにおけるautoindexモジュールの具体的な使用法

ブラウザ モジュールの主な機能は、http リクエスト ヘッダーの「User-Agent」の値とブラ...

Javascriptのクロージャとアプリケーションの詳細な説明

目次序文1. クロージャとは何ですか? 1.1 クロージャは条件コードを満たす1.2 クロージャ生成...

IE、Firefox、Chromeブラウザではスペースの表示が異なります

&nbsp;&nbsp;IE、Firefox、Chrome ブラウザでの表示効果は、...

HTML での位置の使用に関する簡単な紹介

昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...

MySQLの基本を素早く学ぶ

目次SQLを理解するSELECTを理解するエイリアス定数をクエリし、固定定数列を追加します。重複行を...

vue2 vue3 での Echarts の詳細な使用方法

目次1. インストール2. vue2でEchartsを使用するmain.jsファイル内コンテナが与え...

Windows 10 で MySQL を完全にアンインストールして再インストールするための詳細な手順

さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...

Zabbix はどのようにして ssh 経由でネットワーク デバイス データを監視および取得するのでしょうか?

シナリオシミュレーション:ある会社の運用保守担当者は、以前購入した一連のネットワーク機器の光ポートの...

MySQL 構成 SSL マスタースレーブ レプリケーション

MySQL5.6 SSLファイルの作成方法公式ドキュメント: https://dev.mysql.c...

CSS3 で作成したホバーズーム効果

結果:実装コード: html <link href='https://fonts.go...

WeChatアプレットのスクロールビューの改行問題を解決する

今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...