mysql的獨占鎖和共享鎖


  當有多個事務同時更新一條sql時,mysql是如何處理的呢?很顯然,使用加鎖的方式,一個事務獲得了鎖,進行操作,其他事務排隊一個個等着,等當前這個事務執行完釋放鎖,其他事務獲取鎖取到鎖的進行操作。這里的鎖就是獨占鎖,也就是X鎖。

  那么如果有查詢這一行數據時,是要加鎖嗎?不是的,mysql為了提高性能,讀的時候使用mvcc機制,通過ReadView,查詢undo log版本鏈,獲取到自己能查詢到的版本數據。讀與更新同時進行,不互斥,性能就提高了。

  共享鎖又是什么呢?mysql里叫共享鎖為S鎖,通 過手動執行select * from table lock in share mode來加共享鎖。加了共享鎖,還能加獨占鎖嗎?不能的,共享鎖和獨占鎖是互斥的。不過共享鎖和共享鎖不互斥,也就是加了一個共享鎖,還可以再加另一個共享鎖。

  獨占鎖 共享鎖
獨占鎖 互斥 互斥
共享鎖 互斥 不互斥

 

  但平時我們是很少去手動加共享鎖的,一般更新時加獨占鎖就夠了。 另外執行select * from table for update也會加獨占鎖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM