剛開始寫博客.. 寫的太low。
1、數據庫的兩種讀,每種讀讀的數據版本不一樣,所以也稱為MVCC,即多版本並發控制
a) 快照讀
select * from where xxx 這種形式的都是快照讀。
b) 當前讀
update , insert ,delete ,select xx from xx for update , in share mode 都是當前讀
當前讀會等待,不會返回數據的歷史版本
2、mvcc 的實現原理
mvcc是基於read view、活躍事務列表 做的,以后的文章我會專門分析這塊。
3、mysql 是如何解決臟讀、幻讀、不可重復讀的
a) 在快照讀下是用的mvcc 做的 ,mysql RR 下 會產生幻讀!!
快照讀下數據的可見返回 = mvcc + 當前事務加鎖的行
b) 在當前讀使用 鎖
加上鎖了,別的事務要修改只能等待,自然也就沒有各種問題了
總結:innodb默認使用的mvcc + 鎖的混合模式。innodb的RR模式並沒有完全解決幻讀的問題。
mvcc 和 鎖 都可以解決幻讀、重復讀問題。兩者方式不一樣,前者通過冗余數據,后者通過鎖。
