拋開事務隔離級別談幻讀都是耍流氓.
幻讀是可重複讀下的一種現象,是不是問題,看業務場景接不接受. 事務隔離級別越低,性能越好. 目前互聯網服務端,大部分都不會開啓事務. 通過分佈式緩存進行併發控制.
但是幻讀這個知識點還是很重要的, 數據庫的解決方法和思路同樣能用於"互聯網開發". 例如版本號的概念. 創建版本號,刪除版本號. 實體生命週期對應的版本號.
(select from ) - mvcc可以解決幻讀,被稱爲快照讀
(select for update , update where) -- 兩種實現,一種是實現避免幻讀,但是要拋錯,告知調用方你改的數據已經不是你開啓事務時的版本,實現行級別樂觀鎖機制; 另一種實現是有幻讀,所有匹配到數據都能夠修改成功,如果業務方有需要版本判斷,業務方自己去實現字段級別樂觀鎖機制. 目前的實現是第二種, 故被稱爲當前讀. 這種實現下會出現幻讀. 不是mvcc不能解決,而是需求和定義要求出現幻讀.
這篇文章的例子倒是不錯,能很好的解釋爲什麼mvcc解決了幻讀, 注意這篇文章例子不錯,但是結論錯了.https://www.jianshu.com/p/cef49aeff36b