47、如何保证事务的隔离性?

事务的隔离性是由锁和mvcc实现的,mvcc的意思是多版本并发控制,指的是维护一个数据的多个版本,使读写操作没有冲突,它的底层实现主要分为三个部分。

第一个部分是隐藏字段,在MySQL中给每个表都设置了两个隐藏字段,一个是事务id,记录每一次操作的事务id,是自增的。另一个是roll_pointer回滚指针,指向上一个版本的事务版本记录地址。

第二个部分是undo_log日志,主要用来记录回滚日志,存储老版本的数据,在内部会形成一个版本链。多个事务并行操作某一行数据时,会记录不同事务修改数据的版本,通过roll_pointer形成一个链表。

第三个部分是ReadView,它解决了事务查询时选择版本的问题,根据ReadView的匹配规则和当前的一些事务id,来判断该访问哪个版本的数据。不同的隔离级别下的快照读是不一样的,最终访问的结果也是不一样的,如果是RC隔离级别,则每一次执行快照读时都会生成ReadView,如果是RR隔离级别,只会在第一次执行快照读时生成ReadView,后续复用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值