it编程 > 数据库 > Mysql

深入理解MySQL默认事物隔离级别

7人参与 2026-03-19 Mysql

你想知道 mysql 的默认事务隔离级别,这是理解 mysql 并发控制、解决脏读 / 幻读 / 不可重复读等问题的核心知识点。我会从「默认值」「隔离级别分类」「原理验证」「修改方法」四个维度详细讲解,让你不仅知其然,更知其所以然。

一、mysql 默认事务隔离级别

1. 核心结论

2. 快速验证(实操命令)

你可以直接在 mysql 客户端执行以下命令,查看当前默认隔离级别:

-- 查看全局/会话级别的默认隔离级别
select @@global.transaction_isolation, @@session.transaction_isolation;

-- 旧版本(mysql 5.6及之前)用这个命令
select @@global.tx_isolation, @@session.tx_isolation;

输出示例

@@global.transaction_isolation@@session.transaction_isolation
repeatable-readrepeatable-read

二、事务隔离级别的完整分类(acid 中的 i)

sql 标准定义了 4 种事务隔离级别,mysql innodb 全部支持,级别从低到高如下(隔离性越强,并发性能越差):

隔离级别脏读不可重复读幻读核心说明
read uncommitted(读未提交)最低级别,能读取其他事务未提交的数据,会导致脏读
read committed(读已提交)只能读取其他事务已提交的数据,解决脏读,但仍有不可重复读 / 幻读
repeatable read(可重复读)mysql 默认,同一事务内多次读取同一数据结果一致,innodb 额外解决了幻读
serializable(串行化)最高级别,事务串行执行,完全解决并发问题,但性能极差(几乎不用于生产)

关键概念解释(新手必看)

三、mysql 默认级别(repeatable read)的核心原理

innodb 的repeatable read之所以能同时解决不可重复读和幻读,核心依赖两个机制:

1. 多版本并发控制(mvcc)

2. 间隙锁(gap lock)

四、如何修改事务隔离级别

1. 临时修改(当前会话生效,重启失效)

-- 设置当前会话的隔离级别为读已提交
set session transaction_isolation = 'read-committed';

-- 验证修改结果
select @@session.transaction_isolation;

2. 永久修改(全局生效,需修改配置文件)

编辑 mysql 配置文件(my.cnf/my.ini):

[mysqld]
# 设置全局默认隔离级别为读已提交
transaction-isolation = read-committed

重启 mysql 服务:

# linux
systemctl restart mysqld

# windows
net stop mysql && net start mysql

验证全局配置:

select @@global.transaction_isolation;

3. 按事务临时修改(仅当前事务生效)

-- 开启事务前设置
set transaction isolation level read committed;
start transaction;
-- 事务内的操作使用读已提交级别
select * from user where age = 20;
commit;

五、不同隔离级别的适用场景

隔离级别适用场景优缺点
repeatable read绝大多数业务场景(电商、后台管理系统等)平衡隔离性和并发性能
read committed高并发写场景(如金融交易)、兼容 oracle 业务并发性能更好,仅解决脏读
serializable数据一致性要求极高的场景(如对账、审计)一致性最好,并发性能极差

总结

  1. 核心默认值:mysql innodb 引擎的默认事务隔离级别是repeatable read(可重复读),这是平衡隔离性和并发性能的最优选择;
  2. 核心能力:该级别基于 mvcc 解决了不可重复读,基于间隙锁额外解决了幻读,比 sql 标准的可重复读更强;
  3. 修改方式:可通过set session/global临时 / 全局修改,或修改配置文件永久生效,按需适配业务场景。

到此这篇关于深入理解mysql默认事物隔离级别的文章就介绍到这了,更多相关mysql默认事物隔离级别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

MySQL 8.0 systemd 服务配置指南

03-19

MySQL 查询优化器 (Query Optimizer) 的使用小结

03-19

MySQL 审计级别配置实现步骤

03-19

Mysql大数据量分页优化过程

03-19

MySql报错:unblock with mysqladmin flush-hosts的解决方案

03-19

mysql 键长如何计算的方法实现

03-18

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论