http://blog.sina.com.cn/s/blog_499740cb0100ugs7.html
上述鏈接很經典的解釋了mysql的mvcc為什么是部分解決了幻讀的問題。
同時我需要理解的是,在業務邏輯中,事務是可以分散在業務代碼里面的,並不是說一條語句寫出。比如,我們啟動了一個事務,start transaction。先獲取數據庫中的數據,然后在業務中判斷該條件是否符合自己的業務邏輯,如果是的話,那么就可以插入一部分數據。但是這個時候可能也有別的數據插入進來了,產生了沖突,導致當前的數據插入不成功。形成怪異的現象。所以這個時候select需要使用lock In share model。這樣就可以使用next-key技術啟動事務。可以保證獲取的信息是當前讀的數據,而不是快照讀。