是什么机制能让它"恰好"避免幻读呢?
1.6k
等23人参与

描述:
前面我们讲解了RR能避免幻读,那么是什么机制能让它"恰好"避免幻读呢?

思路:
可以好好研究一下什么是Gap锁,并多做实验,看看Gap锁为什么能避免幻行和幻读。
幻行:
可以在RC和RR下面分别执行如下语句,因为RC和RR的最显著区别就是RR多了Gap锁
假设原数据集合 1 2 4 5
事务1:select from xxx where between 1 and 5 for update
事务2:insert into xxx values(3)
事务2: commited
事务1:select from xxx where between 1 and 5 for update
幻读:
假定说数据库有id 1 - 5的数据
事务A,B 都开启事务,
事务A:select * from xxx where id between 1 and 4 for update;
事务B: insert into xxx values(6,‘s’);
事务B: commited
事务A: update xxx set name = ‘j’ where id = 6

就会发现,上了Gap锁的部分是能避免幻行和幻读的

我的作业
去发布

登录后即可发布作业,立即

全部作业

数据加载中...

意见反馈 帮助中心 APP下载
官方微信