【MySQL进阶】事务隔离级别 MVCC

目录

MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

2. 读已提交(Read Committed)

3. 可重复读(Repeatable Read)(默认隔离级别)

4. 串行化(Serializable)

表格总结

 MVCC

概念

工作原理

快照读

当前读

undo log日志版本链

readview


MySQL事务隔离级别

1. 读未提交(Read Uncommitted)

  • 特性:最低的隔离级别,事务可以读取未提交的数据。
  • 问题:会产生脏读(Dirty Read),即一个事务可以读到另一个事务未提交的数据变更。
  • 适用场景:几乎不使用,因为它不能保证数据的一致性。

2. 读已提交(Read Committed)

  • 特性:只能读取已经提交的数据,避免了脏读问题。
  • 问题:可能会产生不可重复读(Non-repeatable Read),即同一事务中的两次读取操作可能会得到不同的结果,因为其他事务可能在中间提交了更新。
  • 适用场景:多数数据库系统(如Oracle)默认的隔离级别,适用于读取数据一致性要求不高的场景。

3. 可重复读(Repeatable Read)(默认隔离级别)

  • 特性:同一事务中多次读取相同数据时,结果是一样的,即使其他事务修改了数据并提交。在MySQL中是默认的隔离级别。
  • 问题:可能会产生幻读(Phantom Read),即同一事务中的两次查询操作可能会因为其他事务插入了(或者删除了)新的行而得到不同的结果。
  • 适用场景:大多数应用程序的默认选择,能较好地平衡并发性和一致性。

4. 串行化(Serializable)

  • 特性:最高的隔离级别,通过对所有读取的数据加锁,强制事务串行执行,避免了脏读、不可重复读和幻读问题。
  • 问题:并发性能较差,因为事务必须依次执行。
  • 适用场景:需要严格一致性的数据操作场景,但因为性能开销较大,一般不常用。

表格总结

隔离级别脏读不可重复读幻读并发性应用场景
读未提交可能可能可能最高几乎不用
读已提交不可能可能可能较高读取一致性要求不高的场景
可重复读不可能不可能可能中等MySQL默认,适用于大多数应用程序
串行化不可能不可能不可能最低数据严格一致性要求高的场景,但较少使用

 MVCC

概念

多版本并发控制(MVCC)是一种用于数据库管理系统中处理并发的机制,旨在提高数据库的并发性能和数据一致性。MySQL中的InnoDB存储引擎采用MVCC来实现隔离级别(可重复读)。

工作原理

MVCC通过维护多个数据版本来允许并发的读写操作,而不需要加锁。 每个事务会看到一个数据的一致性快照,这个快照是在事务开始时生成的。

快照读

MVCC机制实现了快照读,普通select查询就是快照读,快照读到数据有可能不是最新的数据,它主要是为了实现可重复读的事务隔离级别。

当前读

在更新数据时读取的是当前最新的数据,而不是快照数据。

undo log日志版本链

它其实就是把每次修改的数据都会保存一份,然后在每条数据基础上增加两个隐藏列,trx_id,roll_pointer,分别存储当前事务ID和上一版本的数据地址。每次对数据进行修改时,InnoDB会将修改前的数据记录到undo log中,从而保留了数据的多个版本。通过undo log,事务能够回滚到之前的状态,以实现原子性。

readview

在可重复读的事务里面,这个readview视图由未提交的事务id数组和已创建的最大事务id(max_id)组成,因此这个最大的 max_id 可能在数组里面,也可能不在,因为事务最大的id可能先提交,而数组里面的id都是未提交的

[trx_id1,trx_id2],max_id

Undo log和read view是InnoDB实现MVCC的重要组件。undo log记录数据的历史版本,使得事务能够回滚和实现一致性读;read view用于事务读取数据时判断数据版本的可见性。通过这两者的结合,InnoDB实现了高效的多版本并发控制,保证数据的一致性和隔离性。

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值