MySQL 5.7及更早版本需用@@tx_isolation查会话隔离级别,8.0+推荐@@transaction_isolation;全局级别用@@global.tx_isolation;事务启动后修改隔离级别不影响已开启事务的一致性视图。

MySQL 8.0+ 用 SELECT @@transaction_isolation 查隔离级别,但老版本会报错
MySQL 5.7 及更早版本不认 @@transaction_isolation 这个变量名,直接执行会提示 Unknown system variable 'transaction_isolation'。必须改用兼容写法。
查当前会话隔离级别:用 @@tx_isolation 最稳妥
无论 MySQL 5.7、5.6 还是 8.0,默认都支持这个变量名:
SELECT @@tx_isolation;
- 返回值形如
'REPEATABLE-READ'(注意是大写连字符) - 它只反映当前连接的会话级设置,不受其他连接影响
- 如果没显式
SET SESSION过,就等于全局值;但一旦设过,就以会话值为准
查全局默认隔离级别:用 @@global.tx_isolation
这个值决定新建立连接的默认行为:
SELECT @@global.tx_isolation;
- MySQL 5.7+ 默认是
'REPEATABLE-READ',Oracle 风格迁移时容易踩坑 - 修改它需要 SUPER 权限:
SET GLOBAL tx_isolation = 'READ-COMMITTED'; - 改完不会影响已存在的连接,只对后续新建连接生效
MySQL 8.0+ 推荐统一用 @@transaction_isolation,但得确认版本
8.0 开始官方把变量名从 tx_isolation 改成 transaction_isolation,语义更清晰。但要注意:
- 执行前先确认版本:
SELECT VERSION(); - 8.0.3 之后才彻底废弃旧变量,部分 8.0.1/2 版本仍只认
@@tx_isolation - 如果脚本要兼容多版本,别硬切,继续用
@@tx_isolation更省事
真正容易被忽略的是:事务启动后,SELECT @@tx_isolation 返回的仍是会话设置值,但它和当前事务实际看到的一致性视图不是一回事——比如在可重复读下开启事务后改隔离级别,已开启的事务不会重新创建一致性视图。


















