【数据库】Innodb如何保证可重复读

明确一些概念
DB_TRX_ID: 记录当前数据行最后一次的更新和插入的事务id
DB_ROLL_PTR: 指向当前记录项的undo log信息
DB_ROW_ID:标识插入的新数据行

如何保证可重复读:事务活跃数组array
1.事务开启后,有一个数组array用来维护当前活跃的事务id(开启未提交)
2.事务id最大值+1记作高水位
3.事务id最小值记作低水位

每一行数据都会有一个undo log的链,当前事务根据数据行的DB_TRX_ID和array决定是否能够查看值。

DB_TRX_ID如果大于高水位,不可查看;DB_TRX_ID小于低水位,可查看;DB_TRX_ID在之间,判断DB_TRX_ID是否在array中,如果在,不可读。

下面引出一个问题
Innodb的可重复读机制能够避免幻读么?
乍一看,通过MVCC机制和间隙锁貌似保证了select和update的问题,但是insert的问题却没有解决,所以还是会存在幻读的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值