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

推薦する

Mailtoを使えばHTMLでメールを送るのは簡単

最近、顧客のフッターメールボックスにクリックして送信するメール機能を追加しました。Baidu で検索...

CnBlogs カスタムブログスタイルの共有

半夜かけてようやくブログのスタイルを大体完成させることができました。ブログ全体が青を基調としていて、...

uni-app で scss を使用するサンプル コード

遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...

CentOS 7 で NFS ファイル共有ストレージ サービスを構築するための完全な手順

序文NFS (Network File System) は、ネットワーク ファイル システムを意味し...

WeChatミニプログラムユーザー認証による携帯電話番号の取得(getPhoneNumber)

序文ミニプログラムには、ユーザーを取得するための非常に便利な API があり、getPhoneNum...

Vueルーティングナビゲーションガードの簡単な理解

目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...

MySQL マルチバージョン同時実行制御 MVCC の実装

トランザクション分離レベルの設定 グローバルトランザクション分離レベルを読み取りコミット済みに設定;...

HTML の基本概要推奨事項 (段落)

HTML段落段落は <p> タグによって定義されます。例<p>これは段落で...

Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

1. Expressライブラリとジェネレータをインストールするcmdを開いて、次のコマンドを入力しま...

Webデザインと制作のテスト問題と参考回答

<br />Web デザインと制作テスト パート I 多肢選択問題 1. 単一選択問題 ...

ES6のシンボルデータ型について詳しく説明します

目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...

Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング

目次序文1.1 機能1.2 要素の可視性を制御する方法1.3 初期レンダリングの比較1.4 スイッチ...

CSS スキル コレクション - 古典の中の古典

リンク上の点線のボックスを削除しますコードをコピーコードは次のとおりです。 a:アクティブ、a:フォ...

Centos7 での NFS サービス構築の紹介

目次1. サーバー2. クライアント3. テストサービス1. サーバー1. YUMソースを使用してN...