MySql8.0 のトランザクション分離レベルエラーの問題を解決する

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

MySql8.0 トランザクション分離レベルエラーの表示

質問

データベースビュートランザクション分離レベル

@@global.tx_isolation、@@tx_isolation を選択します。

エラー:

mysql> @@global.tx_isolation、@@tx_isolation を選択します。
エラー 1193 (HY000): 不明なシステム変数 'tx_isolation'
mysql> @@global.tx_isolation、@@tx_isolation を選択します。
エラー 1193 (HY000): 不明なシステム変数 'tx_isolation'

私はmysqlバージョン8.0を使用しています。 tx_isolation はバージョン 8.0 で global.transaction_isolation に変更されました

コマンドは次のように変更されます

@@global.transaction_isolation、@@transaction_isolation を選択します。

MySQL トランザクション分離レベル (mysql8.0+ の設定と表示を含む)

MySQL の 4 つのトランザクション分離レベル

1. トランザクションの基本要素 (ACID)

1.原子性: トランザクションの開始後、すべての操作が完了するか、まったく実行されないかのどちらかになります。トランザクションが途中で停止することは不可能です。トランザクションの実行中にエラーが発生した場合、トランザクションが開始する前の状態にロールバックされ、すべての操作は何も起こらなかったかのようになります。言い換えれば、物事は、化学で学んだ物質の基本単位である原子と同じように、分割できない全体なのです。

2.一貫性: トランザクションの開始前と終了前、および終了後にデータベースの整合性制約に違反しません。例えば、AがBに送金した場合、Aがそのお金を差し引くことは不可能ですが、Bはそれを受け取りません。

3.分離: 同時に同じデータを要求できるトランザクションは 1 つだけであり、異なるトランザクション間で干渉は発生しません。たとえば、A が銀行カードからお金を引き出す場合、B は A が引き出しプロセスを完了するまでこのカードにお金を送金することはできません。

4.耐久性: トランザクションが完了すると、トランザクションによるデータベースへのすべての更新がデータベースに保存され、ロールバックできなくなります。

2. トランザクションの同時実行性の問題

1.ダーティリード: トランザクションAがトランザクションBによって更新されたデータを読み取り、その後Bが操作をロールバックするため、Aによって読み取られたデータはダーティデータになります。

2.反復不可能な読み取り: トランザクション A は同じデータを複数回読み取ります。トランザクション A が複数回読み取りを行っている間に、トランザクション B がデータを更新してコミットするため、トランザクション A が同じデータを複数回読み取ったときに結果が不一致になります。

3.ファントム リード: システム管理者 A は、データベース内のすべての学生の成績を特定のスコアから ABCDE の成績に変更しましたが、システム管理者 B は、このとき特定のスコアのレコードを挿入しました。システム管理者 A が変更を終えると、まるで錯覚が起こったかのように、変更されていないレコードがまだ残っていることに気付きます。これをファントム リードと呼びます。

概要: 非反復読み取りとファントム読み取りは混同されやすいです。非反復読み取りは変更に重点を置いていますが、ファントム読み取りは追加または削除に重点を置いています。非反復読み取りの問題を解決するには、条件を満たす行のみをロックする必要があります。ファントム読み取りの問題を解決するには、テーブルをロックする必要があります。

3. MySQLトランザクション分離レベルトランザクション分離レベルは2つに分かれています。

コミットされていない読み取り、コミットされた読み取り、繰り返し可能な読み取り、シリアル化可能な読み取り

低レベルから高レベルの順に、Read uncommitted、Read committed、Repeatable read、Serializable の 4 つのレベルがあります。これらの 4 つのレベルにより、ダーティ リード、非反復リード、ファントム リードの問題を 1 つずつ解決できます。

はい: 発生する可能性がありますいいえ: 発生しません

ここに画像の説明を挿入

コミットされていない読み取り

トランザクションAは実行されたがコミットされていない。トランザクションBはトランザクションAの更新されたデータを照会する。トランザクションAはロールバックされる。- ダーティデータが表示される。

コミットされた読み取り

トランザクション A が更新を実行します。トランザクション B がクエリを実行します。トランザクション A が再度更新を実行します。トランザクション B が再度クエリを実行すると、2 回の間でデータが不一致になります。- 繰り返し不可能な読み取り

繰り返し読み取り

トランザクションAが何度実行されても、コミットされない限り、トランザクションBのクエリ値は変更されません。トランザクションBは、トランザクションBが開始された瞬間のデータスナップショットのみをクエリします。 - ファントムリード

シリアル化

読み取りと書き込みの同時操作は許可されません。書き込みを実行すると、読み取りは待機する必要があります。

4. データベース設定

// 現在のトランザクション レベルを表示します (MySQL バージョン 8.0 以上には適用されません。以下を参照してください)。
@@tx_isolation を選択します。

//mysql の分離レベルを設定します:
セッショントランザクション分離レベルを設定します。トランザクション分離レベルを設定します // コミットされていない読み取りレベルを設定します:
セッショントランザクション分離レベルをコミットされていない読み取りに設定します。

//読み取りコミット レベルを設定します。
セッショントランザクション分離レベルをコミット読み取りに設定します。

//繰り返し読み取りレベルを設定します:
セッショントランザクション分離レベルを繰り返し読み取りに設定します。

//シリアル化可能なレベルを設定します:
セッショントランザクション分離レベルをシリアル化可能に設定します。

MySQL 8.0+ クエリデータベーストランザクション分離レベル

MOOC コースの方法に従って、次を使用してトランザクション分離レベルを照会します。

@@tx_isolation を選択します。

私は sequal pro を使用していますが、次のエラーが表示されます: 不明なシステム変数 'tx_isolation'

公式ドキュメントを確認したところ、このクエリ方法は 8.0 以降では廃止されていることがわかりました。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html

ここに画像の説明を挿入

MySQL 8.0.3 では、この変数は transaction_isolation に置き換えられました。

新しいクエリ メソッドは多数ありますが、そのうち 2 つを以下に示します。

1. @@transaction_isolation を選択します。

ここに画像の説明を挿入

2. 「transaction_isolation」のような変数を表示します。

ここに画像の説明を挿入

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL MVCCメカニズム原理の詳細な説明
  • MySQL トランザクション分離レベルと MVCC の詳細な説明
  • MySQL トランザクション分離はどのように実現されますか?
  • MySQL トランザクション分離レベルとロックメカニズムの問題に関する深い理解
  • MySQL マルチバージョン同時実行制御 MVCC の基本原理の分析
  • MySQL マルチバージョン同時実行制御 MVCC の実装
  • Mysql MVCC マルチバージョン同時実行制御の詳細
  • MYSQL トランザクション分離レベルと MVCC

<<:  JTAを実装するためにAtomikosと組み合わせたTomcatについて

>>:  CSS3 rgb と rgba (透明色) の使い方の詳しい説明

推薦する

燃える炎効果の英語フォント16種類をシェアする

私たちは視覚の世界に住んでおり、多くの視覚効果に囲まれています。コンピューターの前にいても、屋外にい...

JavaScript によるデータ視覚化: ECharts マップの作成

目次概要予防1. 使用方法2. 実装手順予備実装コード効果: Geo共通設定上記の構成を追加した後の...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

Antdesign-vueとsortablejsを組み合わせて、2つのテーブルをドラッグして並べ替える機能を実現

目次成果を達成するsortablejs の紹介具体的な実装成果を達成する最初は、antdesign ...

CSS3 フリップカード番号サンプルコード

今日会社から課題をもらったのですが、効果図は以下のとおりです。 どのような効果を実現したいかは特に決...

MySQLでユーザーを作成し、ユーザーに権限を付与する方法の詳細なチュートリアル

目次ユーザー管理新しいユーザーを作成するユーザー名の変更ユーザーのパスワードを設定するルートパスワー...

読み込み進捗バーのネイティブ JS 実装

この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...

ホスト上のDockerコンテナ内でシェルまたはプログラムを実行する

Docker コンテナに繰り返し入って操作することを避けるために、コンテナ内の一連の命令をホストマシ...

MySQL データベース インデックスの面接の質問 (基本的なプログラマー スキル)

目次導入インデックスの原則1. データページ2. ページディレクトリ3. インデックス原則分析要約す...

VMware Workstation での VMware vSphere のセットアップ (グラフィック チュートリアル)

VMware vSphere は、業界をリードする最も信頼性の高い仮想化プラットフォームです。 v...

経験豊富な人が、プロフェッショナルで標準化されたMySQL起動スクリプトの開発方法を紹介します。

シェル スクリプト言語は、すべてのプログラミング言語の中で最も単純な言語であるため、資格のある Li...

デザイン: 意志の強いデザイナー

<br />長年の専門的なアートデザイン教育を通じて「美とは何か」を学びましたが、「美を...

JavaScript における URL オブジェクトの素晴らしい使い方

目次序文解析パラメータURLパラメータを変更する要約する序文URLオブジェクトはページ側ではあまり使...

ウェブデザインに必須のツール: Firefox Web Developer プラグイン CSS ツールセットのチュートリアル

プラグインは Firefox ブラウザにインストールされます。 Web Developer プラグイ...

CSS ロリポップを描くサンプルコード

背景: 毎日少しずつ進歩し、少しずつ積み重ねていけば、どんどん良くなっていきますコード: <!...