大神们,问一个很基础的问题。今天面试的时候,就是关于可重复读 与 幻读,我与面试官的意见产生分歧。面试官认为mysql的RR隔离度下解决了幻读问题,而我不同意。我意见是RR级别是会产生幻读的,是INNODB的MVCC、 NEXT-KEY LOCK解决的幻读,与mysql无关。像是myisam是怎么解决幻读的?
可能是吧。我估摸这也是,可能是他把xtradb说成myisam了。
另外,你说‘innodb又支持间隙锁,解决了幻读问题’,为什么gap lock可以解决幻读? 请详细说明一下,谢谢
另外:
`
begin;
# 1
select count(*) from `order` where uid between 1 and 2;
# 其他事务插入一条数据,uid=1
# 2
select count(*) from `order` where uid between 1 and 2;
update `order` set price = price +1 where uid between 1 and 2 ;
# 3
select count(*) from `order` where uid between 1 and 2;
commit ;
`
3 和 1、2 的结果是不同的,这属不属于幻读吗?谢谢
#3
更多评论
在RR级别的隔离下,innodb又支持间隙锁,解决了幻读问题。而my不支持事务,在不支持事务的数据库引擎下讨论幻读我认为是没有意义的,my表锁的存在就不可能发生幻读。面试官可能下意思的把mysql等价于innodb了。
#2