mysql的事务隔离级别是控制多个事务并发执行时,事务之间相互隔离程度的重要配置,不同的隔离级别对应不同的并发处理能力和数据一致性保障。mysql默认支持的四种隔离级别分别为读未提交、读已提交、可重复读、串行化,其中可重复读是innodb引擎的默认隔离级别。

mysql支持的四种隔离级别
首先需要明确mysql的四种标准隔离级别的具体含义,方便后续按需修改:
- 读未提交(READ UNCOMMITTED):一个事务可以读到另一个未提交事务修改的数据,可能出现脏读、不可重复读、幻读问题。
- 读已提交(READ COMMITTED):一个事务只能读到另一个已提交事务修改的数据,可避免脏读,但可能出现不可重复读和幻读。
- 可重复读(REPEATABLE READ):同一个事务中多次读取同一范围的数据,结果保持一致,可避免脏读、不可重复读,innodb引擎下还可避免幻读。
- 串行化(SERIALIZABLE):事务串行执行,完全隔离,可避免所有并发问题,但性能最低。
修改全局隔离级别
全局隔离级别修改后,会对所有新建立的会话生效,已经存在的会话不受影响。修改需要拥有SUPER权限或者SYSTEM_VARIABLES_ADMIN权限。
方式一:使用SET GLOBAL命令临时修改
临时修改在mysql服务重启后会失效,适合临时测试场景,语法如下:
-- 设置全局隔离级别为读已提交 SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 也可以使用简化语法 SET GLOBAL transaction_isolation = 'READ-COMMITTED';
方式二:修改配置文件永久生效
如果需要重启后依然保持修改后的隔离级别,需要修改mysql的配置文件my.cnf(Linux系统)或者my.ini(Windows系统),在[mysqld]节点下添加配置:
[mysqld] # 设置全局默认隔离级别为可重复读 transaction-isolation = REPEATABLE-READ
修改完成后重启mysql服务即可生效。
修改会话隔离级别
会话级别的隔离级别仅对当前连接的会话生效,不影响其他会话,也不需要特殊权限,优先级高于全局隔离级别。
-- 设置当前会话隔离级别为串行化 SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 简化语法 SET SESSION transaction_isolation = 'SERIALIZABLE';
验证隔离级别是否修改成功
修改完成后可以通过以下sql语句查看当前的隔离级别配置:
-- 查看全局隔离级别 SELECT @@GLOBAL.transaction_isolation; -- 查看当前会话隔离级别 SELECT @@SESSION.transaction_isolation;
修改隔离级别的注意事项
- 修改全局隔离级别不会影响已经存在的会话,仅对新建立的连接生效。
- 生产环境修改隔离级别前需要评估对业务的影响,尤其是从低隔离级别调整到高隔离级别时,可能会出现更多的锁等待问题。
- innodb引擎的可重复读隔离级别通过多版本并发控制(MVCC)和间隙锁机制避免了幻读问题,和其他存储引擎的表现可能不同。
- 如果使用的是非innodb存储引擎,需要确认对应引擎是否支持目标隔离级别,避免配置不生效。
mysql事务隔离级别SET_GLOBALSET_SESSIONinnodb修改时间:2026-06-23 06:36:24