当前会话隔离级别需用SELECT @@transaction_isolation(5.7.20+)或@@tx_isolation(旧版)查询,其值可能已被会话显式修改;全局值须用@@global.transaction_isolation查询,且配置文件中的transaction-isolation设置会覆盖动态修改。

查看当前会话的事务隔离级别
MySQL 中事务隔离级别是会话级(session)和全局级(global)分开维护的,SELECT @@tx_isolation 或 SELECT @@transaction_isolation 返回的是当前会话生效的值。注意:5.7.20+ 推荐用 @@transaction_isolation,旧版本(如 5.6)只认 @@tx_isolation,否则报错 Unknown system variable 'transaction_isolation'。
实操建议:
- 优先执行
SELECT @@transaction_isolation;若报错,再试SELECT @@tx_isolation - 该值不一定是全局设置的副本——它可能已被当前会话显式修改过
- 在连接刚建立、未执行任何
SET前,会话级默认继承全局值
查看全局事务隔离级别
全局值决定新连接的默认会话隔离级别,但不影响已存在的会话。查全局配置必须显式加 @@global. 前缀,否则仍查会话级。
实操建议:
- 执行
SELECT @@global.transaction_isolation(或@@global.tx_isolation,视版本而定) - 也可从配置文件确认:检查
my.cnf或my.ini中是否有transaction-isolation = READ-COMMITTED这类配置项 - 注意:即使配置文件写了,若 MySQL 启动时没读到该文件(比如指定了其他路径),实际全局值仍可能是默认值
动态修改会话与全局隔离级别
MySQL 支持运行时调整,但语法和权限要求不同。修改会话级无需特殊权限;修改全局级需 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限(8.0.16+)。
实操建议:
- 改当前会话:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED(支持READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SERIALIZABLE) - 改全局(影响后续新连接):
SET GLOBAL transaction_isolation = 'READ-COMMITTED'(注意:值必须用单引号,且用短横线分隔,不是空格) - 不要用
SET GLOBAL tx_isolation = ...—— 5.7.20+ 已废弃,会提示警告甚至拒绝 - 修改全局后,已有连接不受影响,需重连才能应用新默认值
为什么改了全局值,新连接还是旧隔离级别?
常见现象:执行了 SET GLOBAL transaction_isolation = 'READ-COMMITTED',然后新开一个客户端连接,SELECT @@transaction_isolation 却仍是 REPEATABLE-READ。根本原因通常是配置文件中设置了静态参数,覆盖了动态修改。
排查要点:
- 检查是否启用了
--skip-grant-tables或其它跳过配置加载的启动方式 - 确认 MySQL 实际加载的配置文件路径:
mysqld --verbose --help | grep "Default options" - 检查该配置文件中是否存在
transaction-isolation行——如果有,它会覆盖所有动态设置,包括SET GLOBAL - 重启 MySQL 后,动态设置的全局值不会持久化;要永久生效,必须写入配置文件并重启


















