不可重复读和幻读的区别是什么
不可重复读是指同一个事务两次读取的结果不一样,幻读也是指同一个事务两次读取的结果不一样,它们的区别在于,不可重复读是由于读取的数据发生了修改,幻读则是由于读取的数据集发生了新增或者删除。
所以,解决不可重复读只需要记录锁 或者 快照读 或者 共享锁,解决幻读则需要加间隙锁,记录锁锁定了一条记录,而间隙锁则锁定了一个记录区间。
举个例子,select ... where id > 3 and id < 6
,间隙锁可以锁住id位于3和6之间的区间,但无法锁住 3 之前和 6 之后。
所以,MySQL 在可重复读隔离级别下可以避免幻读,但无法完全解决幻读。
重点:快照读 + 间隙锁
版权声明:凡未经本网站书面授权,任何媒体、网站及个人不得转载、复制、重制、改动、展示或使用本网站的局部或全部的内容或服务,或在非本网站所属服务器上建立镜像。如果已转载,请自行删除。同时,我们保留进一步追究相关行为主体的法律责任的权利。我们希望与各媒体合作,签订著作权有偿使用许可合同,故转载方须书面/邮件申请,以待商榷。