InnoDB中鎖的類型非常多,總體上可以如下分類:
這些鎖都是做什么的?具體含義是什么?我們現在來一一學習。
1. 解決并發事務問題
我們已經知道事務并發執行時可能帶來的各種問題。最大的一個難點是:一方面要最大程度地利用數據庫的并發訪問能力,另一方面又要確保每個用戶能以一致的方式讀取和修改數據,尤其是一個事務進行讀取操作而另一個事務同時進行改動操作的情況下。
2. 并發事務問題
當一個事務進行讀取操作,而另一個事務進行改動操作時,我們前面說過,這種情況下可能發生臟讀、不可重復讀、幻讀的問題。
怎么解決臟讀、不可重復讀、幻讀這些問題呢?其實有兩種可選的解決方案:
2.1. 方案一:讀操作使用MVCC,寫操作進行加鎖
事務利用MVCC進行的讀取操作稱之為一致性讀,或者一致性無鎖讀,也稱之為快照讀,其讀取的通常是記錄的歷史版本數據。所有普通的SELECT
語句(plain SELECT)在R