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