mysql 幻讀問題- 數據庫事務

拋開事務隔離級別談幻讀都是耍流氓.

      幻讀是可重複讀下的一種現象,是不是問題,看業務場景接不接受. 事務隔離級別越低,性能越好. 目前互聯網服務端,大部分都不會開啓事務. 通過分佈式緩存進行併發控制. 

      但是幻讀這個知識點還是很重要的, 數據庫的解決方法和思路同樣能用於"互聯網開發". 例如版本號的概念. 創建版本號,刪除版本號. 實體生命週期對應的版本號. 

     (select from ) - mvcc可以解決幻讀,被稱爲快照讀
     (select for update , update where) -- 兩種實現,一種是實現避免幻讀,但是要拋錯,告知調用方你改的數據已經不是你開啓事務時的版本,實現行級別樂觀鎖機制; 另一種實現是有幻讀,所有匹配到數據都能夠修改成功,如果業務方有需要版本判斷,業務方自己去實現字段級別樂觀鎖機制. 目前的實現是第二種, 故被稱爲當前讀. 這種實現下會出現幻讀. 不是mvcc不能解決,而是需求和定義要求出現幻讀.

     這篇文章的例子倒是不錯,能很好的解釋爲什麼mvcc解決了幻讀, 注意這篇文章例子不錯,但是結論錯了.https://www.jianshu.com/p/cef49aeff36b

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章