mysql如何设置事务隔离级别_mysql隔离级别设置方法

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

MySQL 中设置事务隔离级别,主要通过 SESSION(当前会话)或 GLOBAL(全局)作用域来配置,支持的级别有 READ UNCOMMITTEDREAD COMMITTEDREPEATABLE 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 TRANSACTIONBEGIN 之前设置才对后续事务生效
  • 若已在事务中,该设置不会影响当前事务,只影响之后开启的新事务

全局隔离级别设置(需权限)

影响所有新建立的连接(已存在的连接不受影响),需要 SUPERSYSTEM_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 级别,且具备持久性