MySQL事务隔离级别包括READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ(默认)和SERIALIZABLE,分别对应不同一致性与性能权衡,可通过SQL查看或设置会话/全局级别。

MySQL 的事务隔离级别决定了一个事务能看到其他并发事务修改数据的程度。设置合适的隔离级别能避免脏读、不可重复读和幻读等问题,同时兼顾性能与一致性。
查看当前会话或全局的隔离级别
可以通过以下 SQL 查看当前设置:
- 查看当前会话的隔离级别:SELECT @@transaction_isolation;
- 查看全局默认隔离级别:SELECT @@global.transaction_isolation;
返回值通常为 'READ-UNCOMMITTED'、'READ-COMMITTED'、'REPEATABLE-READ' 或 'SERIALIZABLE'(MySQL 8.0+ 默认使用 'REPEATABLE-READ')。
临时修改当前会话的隔离级别
仅影响当前连接,断开后失效:
- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;(SESSION 关键字可省略)
注意:必须在事务开始前设置,否则会报错 “Can’t change transaction isolation level when a transaction is active”。
永久修改全局默认隔离级别
需修改 MySQL 配置文件(如 my.cnf 或 my.ini),在 [mysqld] 段落下添加:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- transaction-isolation = READ-COMMITTED
支持的值(大小写不敏感):READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。修改后需重启 MySQL 服务生效。
不同隔离级别的行为与适用场景
READ-UNCOMMITTED:最低级别,允许脏读。极少使用,仅用于对一致性无要求、追求极致吞吐的场景(如实时日志分析)。
READ-COMMITTED:避免脏读,但可能有不可重复读。适合大多数 Web 应用(如订单查询),配合 MVCC 效率较高。
REPEATABLE-READ(MySQL 默认):避免脏读和不可重复读,通过间隙锁(Gap Lock)缓解幻读,但严格意义上仍可能发生幻读(如新增记录未被 WHERE 条件覆盖)。适合强一致性业务,如金融记账。
SERIALIZABLE:最高级别,强制串行执行,完全避免幻读,但并发性能最差,容易锁表或锁行。仅在极少数强校验场景下启用。

















