MySQL事务隔离级别可通过SESSION或GLOBAL作用域设置,支持READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ(默认)、SERIALIZABLE;可运行时动态调整或通过配置文件持久化,需注意生效范围与权限要求。

MySQL 中设置事务隔离级别,主要通过 SESSION(当前会话)或 GLOBAL(全局)作用域来配置,支持的级别有 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ(默认)、SERIALIZABLE。设置方式分启动时配置和运行时动态调整两种。
查看当前事务隔离级别
执行以下语句可查看当前会话或全局的隔离级别:
-
SELECT @@transaction_isolation;(推荐,MySQL 5.7.20+ 和 8.0 默认返回标准格式如REPEATABLE-READ) -
SELECT @@tx_isolation;(旧版本兼容写法,已弃用) -
SELECT @@global.transaction_isolation;查看全局级别 -
SELECT @@session.transaction_isolation;查看当前会话级别
会话级隔离级别设置(常用)
在当前连接中生效,不影响其他连接,适合临时调试或特定业务逻辑:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;-
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;(省略 SESSION 默认即会话级) - 必须在
START TRANSACTION或BEGIN之前设置才对后续事务生效 - 若已在事务中,该设置不会影响当前事务,只影响之后开启的新事务
全局隔离级别设置(需权限)
影响所有新建立的连接(已存在的连接不受影响),需要 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限:
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;- 修改后,新连接将使用该级别,但不会改变正在运行的会话
- 建议配合配置文件持久化,避免重启失效
配置文件永久生效(推荐生产环境)
编辑 MySQL 配置文件(如 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段添加:
-
transaction-isolation = READ-COMMITTED(注意使用短横线格式,值不带引号) - 可选值:`READ-UNCOMMITTED`、`READ-COMMITTED`、`REPEATABLE-READ`、`SERIALIZABLE`
- 修改后需重启 MySQL 服务才能生效
- 该配置等效于启动时设置 GLOBAL 级别,且具备持久性










