mysql中MVCC理解

1 事务隔离级别

读未提交(脏读,不可重复读,幻读)
读已提交(不可重复读,幻读)
可重复读(幻读)–>但在mysql5.6版本之后,由于mysql的具有的间隙锁,解决了幻读问题
串行化(安全级别高),效率低,涉及加锁解锁操作。
所以引入MVCC,不使用锁来实现大并发操作。

2 MVCC

 MVCC即多版本并发控制,基本思想是在读已提交和可重复读这两个隔离级别下,为每次事务生成一个新版本的数据,随后在使用语句读数据时选择不同的版本的数据即可以实现对结果完整性的读取。可以提高并发的读写性能。
 readview
 两者的区别主要是readview生成的时机不同。在读已提交中,每次使用select语句都会生成新的readview;在可重复读中,使用的都是第一次进行select语句操作后生成的
 版本查找的时候会读取一致性视图readview:格式是
[未提交的事务id数组]+已创建的最大事务id,并根据readview从undo log日志在最新的记录按照以下规则依次向下找。
1、在数据库存储中,数据的存储是在页中按行进行的,每行具有三个隐藏项,row_id(创建索引),trx_id(事务id),roll_ptr(回滚指针)
2、每次更新操作(update,delete)的时候后会生成一条undo log日志,回滚指针指向前一条记录。
规则:
如果当前记录:事务id<未提交事务的最小id,则可读
当前事务id在未提交的事务id数组中,则不可读,继续向下找
当前事务id>已提交的最大事务id,则不可读
未提交的事务id数组中的最小版本 <当前事务id<=已提交的最大事务id,且当前事务id不在提交的事务id数组,则说明事务已提交,可读。
以下是在读已提交的隔离级别下操作:
在这里插入图片描述
undo_log:(版本链)
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值