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

推薦する

MySQLを閉じることができない問題を解決する方法

mysql が閉じない場合の解決策:コンピュータのタスクバーを右クリックしてタスクマネージャーを開き...

border-image を使用してテキストバブルの境界線を実装する方法のサンプルコード

開発中に、非常に単純なテキストバブル効果に遭遇しました。これは、おおよそ次のようになります。 うーん...

MySQL の WriteSet 並列レプリケーションの簡単な分析

【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...

CSS 共通スタイルで二重矢印を描画するサンプルコード

1. 単一の矢印への複数の呼び出し単一の矢印を実装したら、二重矢印を実装するのは簡単です。上では、単...

開発にVscodeとdockerを組み合わせて使用​​する詳細なプロセス

序文Docker と VS Code を使用すると、ローカル開発環境全体を最適化し、プロジェクトの進...

js 基本構文と Maven プロジェクト構成チュートリアル ケース

目次1. jsステートメント2番目、js配列3. js関数4. メイヴンV. 結論1. jsステート...

JavaScript データのフラット化の詳細な説明

目次フラット化とは何か再帰トストリング減らすアンダーコア_.平坦化_。連合_。違い要約するフラット化...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

25 div+css プログラミングのヒントとコツ

1. ul タグには、Mozilla ではデフォルトでパディング値がありますが、IE ではマージン値...

webpackコード断片化の実装

目次背景コモンズチャンクプラグイン分割チャンク構成リソースを非同期に読み込む要約する背景高性能なアプ...

mysql 5.7.23 winx64 解凍バージョンのインストールチュートリアル

参考までに、mysql-5.7.23-winx64 解凍版の詳細なインストールチュートリアルです。具...

Tomcat セキュリティ仕様 (Tomcat セキュリティ強化と仕様)

tomcat はオープンソースの Web サーバーです。Tomcat ベースの Web は実行効率...

MySQL の繰り返し読み取りレベルでファントム読み取りを解決できますか?

導入データベース理論についてさらに学んでいくうちに、さまざまな分離レベルによって起こり得る問題につい...

ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js

この記事の例では、ドロップダウンボックス選択コンポーネントを実装するためのjsの具体的なコードを参考...

mysql 3つのテーブルを接続してビューを作成する

3 つのテーブルが接続されています。テーブル A のフィールド a はテーブル B のフィールド b...