樓主的結(jié)論具有誤導(dǎo)性,不是mvcc不能解決,而是定義和需求要求當(dāng)前讀要幻讀.
我總結(jié)下:
(select from ) - mvcc可以解決幻讀,被稱為快照讀
(select for update , update where) -- 兩種實現(xiàn),一種是實現(xiàn)避免幻讀,但是要拋錯,告知調(diào)用方你改的數(shù)據(jù)已經(jīng)不是你開啟事務(wù)時的版本,實現(xiàn)行級別樂觀鎖機制; 另一種實現(xiàn)是有幻讀,所有匹配到數(shù)據(jù)都能夠修改成功,如果業(yè)務(wù)方有需要版本判斷,業(yè)務(wù)方自己去實現(xiàn)字段級別樂觀鎖機制. 目前的實現(xiàn)是第二種, 故被稱為當(dāng)前讀. 這種實現(xiàn)下會出現(xiàn)幻讀. 不是mvcc不能解決,而是需求和定義要求出現(xiàn)幻讀.
MVCC 能解決幻讀嗎?昨天面試當(dāng)中一個小伙認為MVCC可以解決RR中的幻讀問題, 先說結(jié)論, MVCC不能解決幻讀,很遺憾還是得用鎖。 下面詳細描述一下。InnoDB的MVCC, 實現(xiàn)的是基于多...