240 发简信
IP属地:浙江
  • 楼主的结论具有误导性,不是mvcc不能解决,而是定义和需求要求当前读要幻读.
    我总结下:
    (select from ) - mvcc可以解决幻读,被称为快照读
    (select for update , update where) -- 两种实现,一种是实现避免幻读,但是要抛错,告知调用方你改的数据已经不是你开启事务时的版本,实现行级别乐观锁机制; 另一种实现是有幻读,所有匹配到数据都能够修改成功,如果业务方有需要版本判断,业务方自己去实现字段级别乐观锁机制. 目前的实现是第二种, 故被称为当前读. 这种实现下会出现幻读. 不是mvcc不能解决,而是需求和定义要求出现幻读.

    MVCC 能解决幻读吗?

    昨天面试当中一个小伙认为MVCC可以解决RR中的幻读问题, 先说结论, MVCC不能解决幻读,很遗憾还是得用锁。 下面详细描述一下。InnoDB的MVCC, 实现的是基于多...