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 (透明色) の使い方の詳しい説明

推薦する

Django+mysql の設定と簡単な操作データベースのサンプルコード

ステップ1: MySQLドライバをダウンロードするcmdは作成されたDjangoプロジェクトディレク...

MYSQL から MARIADB へのプロジェクト移行に関するチュートリアル

データベース (MySQL) を準備します。すでに MySQL をお持ちの場合は、これを無視できます...

Web面接におけるJS事前解析と変数プロモーションの違い

目次事前分析とは何ですか?変数と関数の準備の違いvar 変数の繰り返し宣言変数と関数の昇格の優先順位...

モバイルデバイス上の 1px 境界線を解決する最善の方法 (推奨)

モバイル デバイス向けに開発する場合、Retina 画面上で要素の境界線が太くなるという問題に遭遇す...

HTML+JS に基づくシンプルな年齢計算ツールの実装

目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...

CSS3 における構造擬似クラスセレクターと擬似要素セレクターの使い方の詳細な説明

構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...

MySQL の分離レベル、ロック、MVCC の紹介

この記事の目的は、これらの概念とその機能の関係を明らかにすることです。 Mysql がトランザクショ...

Linux のユーザーとグループ管理によく使われるコマンドの概要

この記事では、Linux のユーザーとグループの管理によく使用されるコマンドをまとめます。ご参考まで...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント。ウェブサイトのアクセス速度...

MySQLが中国語の文字を挿入する問題を永久に解決するコツを教えます

目次序文最初のステップ:ステップ2: このmy.iniを変更する要約する序文問題の説明:不正な文字列...

CSSマウスを画像の上に置いたときにマスクレイヤー効果を追加する実装

まず効果を見てみましょう: マウスを画像の上に移動すると、影の効果とテキスト/アイコンが追加されます...

Vueは2つのルーティング許可制御メソッドを実装しています

目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...

NodeJs の高メモリ使用量のトラブルシューティング実戦記録

序文これは、オンライン コンテナーの拡張によって発生した調査です。最終的には、実際の OOM が原因...