MySQLのトランザクション分離レベルを確認しようとしたころ、MySQLのバージョンによって確認方法に差がありました。
まずは確認のためのコマンドを安易にグーグル検索したところ、
mysql> SELECT @@global.tx_isolation, @@session.tx_isolation;
というのがすぐに見つかったので実行してみます。
すると、
ERROR 1193 (HY000): Unknown system variable 'tx_isolation’
エラーが出る。そんなシステム変数は無いらしい。
次に見つかったコマンドも打ってみます。
mysql> SHOW VARIABLES LIKE 'tx_isolation';
するとやはり、
Empty set (0.01 sec)
何も見つからない。
試しにワイルドカードを使用すると
mysql> SHOW VARIABLES LIKE '%isolation%';
今度はちゃんと見つかりました。
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec)
変数名がtx_isolationではなく、transaction_isolationでした。
ちゃんと調べたところ、MySQL 5.7のドキュメントに記載があります。
Note
transaction_isolation was added in MySQL 5.7.20 as a synonym for tx_isolation, which is now deprecated and is removed in MySQL 8.0.
Applications should be adjusted to use transaction_isolation in preference to tx_isolation.
「transaction_isolation は MySQL 5.7.20 で tx_isolation の同義語として追加されましたが、現在では非推奨となり MySQL 8.0 で削除されました。
アプリケーションは、tx_isolationよりもtransaction_isolationを優先して使用するように調整する必要があります。」(機械翻訳)
ということでMySQLのバージョン8からは、SELECT @@global.transaction_isolation, @@session.transaction_isolation が使えます。
mysql> SELECT @@global.transaction_isolation, @@session.transaction_isolation;
+--------------------------------+---------------------------------+
| @@global.transaction_isolation | @@session.transaction_isolation |
+--------------------------------+---------------------------------+
| REPEATABLE-READ | REPEATABLE-READ |
+--------------------------------+---------------------------------+
ちなみにMySQLのバージョンはSELECT version() で確認できます。
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 8.0.28 |
+-----------+
まとめ
MySQLでトランザクション分離レベルを確認するには
ver5.7までは
mysql> SELECT @@global.tx_isolation, @@session.tx_isolation;
ver8.0からは
mysql> SELECT @@global.transaction_isolation, @@session.transaction_isolation;
ということでした。
参考
MySQL 5.7 Reference Manual
MySQLのautocommitとトランザクション分離レベルのメモ