mysql 的不可重复读/幻度 是哪种方式解决的?
在看《MySql技术内幕 InnoDB存储引擎》中关于 不可重复读/幻度有个奇怪的问题:
一致性的非锁定读可以解决 不可重复读和幻读问题
然后书上又提到 Next-Key Lock算法解决了 不可重复读和幻读。
那么到底是哪个技术解决了不可重复都和幻读问题呢?
++++++++++++++以下个人理解++++++++++++++++
在Repeatable Read模式下,测试来看:
select....from..... 会采用一致性的非锁定读,不会阻塞另一个会话同一个表的DML操作
select.....from....for update 会采用 Next-Key Lock,会阻塞另一个会话同一个表的DML操作
在个人看来Next-Key Lock是用来锁整个表的,不能有并发表操作,天然的避免了不可重复读和幻读。
而一致性非锁定读可以做到DML操作期间读取记录,可以与DML操作并发,同样避免了不可重复度和幻度。