コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り 1. 2 つの MySql コマンド プロンプト ラインを開き、同じデータベースを入力して、現在のテーブルの内容が次のように同じデータであることを確認します。 2. 両端AとBでselect @@tx_isolationを実行し、現在のデフォルトの分離レベルを確認すると、両方とも 繰り返し可能読み取り - 繰り返し可能読み取り - (現在のトランザクション内で最初に読み取られたデータを繰り返し読み取ることを繰り返し可能読み取りと呼びます。) 3. エンド A の分離レベルを readuncommitted (コミットされていない読み取り) に変更します。つまり、他の人が送信していないデータを読み取ることができるということです。 トランザクション分離レベルをコミットされていない読み取りに設定します。 緑色のMySql5.5で、以下を実行してください。 セッショントランザクション分離レベルをコミットされていない読み取りに設定します。 次に、変更が行われたかどうかを確認します。 4. 両端AとBでトランザクションを開始する トランザクションを開始します。 5. B 側のデータ行を次のように変更します。 id=1 のスタッド setname='Jhon' を更新します。 次に、サイド A でクエリを実行します: select * from stud; 6. このとき、B側は再度ロールバック操作を実行する。 ロールバック; 次に、エンド A でクエリを実行し、データが前のデータに戻っていることを確認します。これはダーティリードです: 7. B 側で書き込まれた新しいデータについては、送信されていない場合は、A 側からクエリすることもできます。これをファントム リードと呼びます。 コミットされた操作プロセスの読み取り: -read COMMITTED 1. A と B が一貫しているかどうかを確認します。 2. エンド A (左) の分離レベルを readcommitted に変更します。 トランザクション分離レベルをコミット読み取りに設定します。 サイド A でトランザクションを開始します。 トランザクションを開始します。 B側で取引を開始する 3. エンド A のクエリ: * fromstudを選択します。 B側のレコードの行を変更して送信する id=1 のスタッド setname='itcast' を更新します。 エンド A に戻ってクエリを実行し、同じトランザクション内の 2 つのクエリの結果が異なることを確認します。 繰り返し読み取りの例 1. エンド A の分離レベルが繰り返し読み取りであるかどうかを確認します。 @@tx_isolation を選択します。 2. オープントランザクションの A 側での最初のクエリ。 次に、B 側のデータベースの内容を変更します。 最後に、エンド A の同じトランザクションで再度クエリを実行し、結果が一貫していることを確認します。 シリアル化可能は最高レベルの分離です 1. A端の分離レベルをSerializableに設定する トランザクション分離レベルをシリアル化可能に設定します。 A 側でトランザクションを開き、スタッド テーブルをクエリします。 B 側でトランザクションを開き、レコードの行を書き込みます。この時点で、B のコードは実行される前に A の送信を待機しているため、実行されていないことがわかります。 スレッド同期の概念に似ている これら 4 つの分離レベルは異なるロック タイプを使用して実装されており、同じデータが読み取られると問題が発生する可能性があります。例えば: ダーティ リード: トランザクションがデータの一部を更新し、別のトランザクションがこの時点で同じデータを読み取ります。何らかの理由で、前のトランザクションが操作をロールバックし、後者のトランザクションによって読み取られたデータは不正確になります。 反復不可能な読み取り: トランザクション内の 2 つのクエリ間でデータが矛盾しています。これは、トランザクションが 2 つのクエリ間で元のデータを更新したことが原因である可能性があります。 ファントム リード: トランザクションの 2 つのクエリのデータ エントリ数が一致しません。たとえば、1 つのトランザクションが複数行のデータをクエリし、別のトランザクションが同時に複数の新しいデータ行を挿入します。次のクエリでは、前のトランザクションが以前にはなかった複数行のデータを見つけます。 読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT
>>: Vue で棒グラフを使用し、自分で設定を変更する方法
wxsとは何ですか? wxs (WeiXin Script) は、小規模プログラム用のスクリプト言語...
背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...
エラーは次のとおりです:キャッチされない TypeError: 未定義のプロパティ 'mod...
1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...
目次導入配列の作成作成方法詳しい説明方法参加する() push() と pop() shift() ...
目次1. 概要1.1 querySelector() と querySelectorAll() の使...
皆さんおはようございます。しばらく記事を更新していませんでした。実は、私は流行中に1か月以上家にいて...
忘れてしまった場合に後で戻って確認できるようにメモしておいてください。問題の説明:今日はちょっとした...
オブジェクトがメソッドを呼び出す順序:インスタンス内にメソッドが存在しない場合は、インスタンス オブ...
この記事では、パーセンテージバーを実現するためのVueの具体的なコードを参考までに共有します。具体的...
これはネイティブ JS で実装されたテキスト スクロール効果です。この効果は通常、ニュース、ダイナミ...
MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるよう...
新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...
目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...
バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...