MySQL トランザクション分離レベルの表示と変更の例

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認する

MySQL では、'%tx_isolation%' などの show variables や select @@tx_isolation; ステートメントを通じて、現在のトランザクション分離レベルを表示できます。

現在のトランザクション分離レベルを表示するための SQL ステートメントと実行結果は次のとおりです。

mysql> '%tx_isolation%' のような変数を表示します。
+---------------+-----------------+
| 変数名 | 値 |
+---------------+-----------------+
| tx_isolation | 繰り返し読み取り |
+---------------+-----------------+
セット内1列、警告1回(0.17秒)
mysql> @@tx_isolation を選択します。
+-----------------+
| @@tx_isolation |
+-----------------+
| 繰り返し読み取り |
+-----------------+
セットに 1 行、警告 1 件 (0.00 秒)

結果は、MySQL の現在のトランザクション分離レベルが REPEATABLE-READ であることを示しています。

さらに、次のステートメントを使用して、それぞれグローバル トランザクション分離レベルとセッション トランザクション分離レベルを照会できます。

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

ヒント: MySQL 8.0.3 では、tx_isolation 変数は transaction_isolation 変数に置き換えられました。 MySQL 8.0.3 でトランザクション分離レベルをクエリするには、上記のクエリの tx_isolation 変数を transaction_isolation 変数に置き換えるだけです。

トランザクション分離レベルを変更する

MySQL には、単一セッションまたはグローバルにトランザクション分離レベルを変更できる SET TRANSACTION ステートメントが用意されています。構文の形式は次のとおりです。

[セッション | グローバル] トランザクション分離レベルの設定 {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

SESSION および GLOBAL キーワードは、変更されたトランザクション分離レベルの範囲を指定するために使用されます。

  • SESSION: 変更されたトランザクション分離レベルが現在のセッション (現在のコマンド ウィンドウ) 内のすべてのトランザクションに適用されることを示します。
  • GLOBAL: 変更されたトランザクション分離レベルがすべてのセッション (グローバル) のすべてのトランザクションに適用され、既存のセッションは影響を受けないことを示します。
  • SESSION と GLOBAL を省略すると、変更されたトランザクション分離レベルは、現在のセッションでまだ開始されていない次のトランザクションに適用されます。

どのユーザーでもセッションのトランザクション分離レベルを変更できますが、グローバル トランザクション分離レベルを変更できるのは SUPER 権限を持つユーザーのみです。

通常のユーザーを使用してグローバル トランザクション分離レベルを変更すると、この操作を実行するにはスーパー権限が必要であることを示すエラー メッセージが表示されます。SQL ステートメントと実行結果は次のとおりです。

C:\Users\leovo>mysql -utestuser -p
パスワードを入力してください: ******
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは41です
サーバーバージョン: 5.7.29-log MySQL コミュニティサーバー (GPL)
 
Copyright (c) 2000, 2020, Oracle およびその関連会社。無断複写・転載を禁じます。
 
OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。
 
ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。
 
mysql> SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
エラー 1227 (42000): アクセスが拒否されました。この操作には SUPER 権限 (少なくとも 1 つ) が必要です。
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

例1

セッションおよびグローバル トランザクションの分離レベルを変更するには、SET TRANSACTION ステートメントを使用します。SQL ステートメントと実行結果は次のとおりです。

mysql> @@session.tx_isolation を選択します。
+------------------------+
| @@session.tx_isolation |
+------------------------+
| シリアル化可能 |
+------------------------+
セットに 1 行、警告 1 件 (0.00 秒)

mysql> グローバルトランザクション分離レベルを REPEATABLE READ に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> @@global.tx_isolation を選択します。
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| 繰り返し読み取り |
+-----------------------+
セットに 1 行、警告 1 件 (0.00 秒)

set tx_isolation コマンドを使用して、現在のセッションのトランザクション分離レベルを直接変更することもできます。SQL ステートメントと実行結果は次のとおりです。

mysql> tx_isolation='READ-COMMITTED' を設定します。
クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒)

mysql> @@session.tx_isolation を選択します。
+------------------------+
| @@session.tx_isolation |
+------------------------+
| コミット読み取り |
+------------------------+
セットに 1 行、警告 1 件 (0.00 秒)

知識ポイント補足

MySQL トランザクション分離レベル読み取りコミット フローチャート

上記は、MySQLのトランザクション分離レベルの表示と変更の例の詳細内容です。MySQLのトランザクション分離レベルの表示と変更の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Mysql トランザクション分離レベルの読み取りコミットの詳細な説明
  • MySQL の 4 つのトランザクション分離レベルの詳細な説明
  • MySQL の 4 つのトランザクション分離レベルの詳細な説明と比較
  • MySQL トランザクション分離とパフォーマンスへの影響の詳細な分析
  • Innodb トランザクション分離レベルと MySQL のロックの関係に関するチュートリアル
  • MySQL データベースのトランザクション分離レベル (トランザクション分離レベル) の概要
  • MySQL InnoDB のロック機構の詳細な説明
  • MySQL のロックの仕組みと使用法の分析
  • MySQL トランザクション分離レベルとロックメカニズムの問題に関する深い理解

<<:  Dockerプライベートウェアハウスレジストリの導入

>>:  ノードイベントループにおけるイベント実行の順序

推薦する

Nginx操作応答ヘッダー情報の実装

前提条件: ヘッダー情報操作をサポートするには、ngx_http_headers_module モジ...

MySQL列挙型のテスト例

プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...

Mysql の主キーと一意キーの違いのまとめ

主キーとは何ですか?主キーは、テーブル内の各タプル (行) を一意に識別するテーブル内の列です。主キ...

FileZilla を使用して FTP ファイル サービスを素早く構築する方法

ファイルの保存とアクセスを容易にするために、FTPサービスが特別に構築されています。 FTP サーバ...

MySQLのインストールと設定方法のグラフィックチュートリアル(CentOS7)

1. システム環境[root@localhost ホーム]# cat /etc/redhat-re...

Docker で Springboot プロジェクトを実行する実装

導入: springboot プロジェクトを実行する Docker の構成は実は非常にシンプルで、L...

スライダー検証コードを実装するJavaScript

この記事では、スライダー検証コードを実装するためのJavaScriptの具体的なコードを参考までに共...

Linux でファイアウォールがオフになっているかどうかを確認する方法

1. サービス方法ファイアウォールのステータスを確認します。 [root@centos6 ~]# サ...

1 つの記事で JSON (JavaScript Object Notation) を理解する

目次JSONが登場JSON構造JSONオブジェクトJson オブジェクトと JavaScript オ...

SQLと各種NoSQLデータベースの使用シナリオの説明

SQL はメイントランクです。なぜ私はこのように理解するのでしょうか。技術的な観点からリレーショナル...

divの適応高さは残りの高さを自動的に埋めます

シナリオ 1: HTML: <div class="outer"> ...

CSSはメッセージパネルをスライドするWebコンポーネント機能を実装します

みなさんこんにちは。私と同じように混乱している方はいらっしゃいませんか。CSS は簡単に始められます...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

MySQL の一般的な SQL ステートメントの概要

1. mysqlエクスポートファイル: SELECT `pe2e_user_to_company`....

CentOS 7 に MySQL 8.0.20 データベースをインストールするための詳細なチュートリアル

関連記事: MySQL8.0.20 インストール チュートリアルとインストールの問題に関する詳細なチ...