mysql的獨佔鎖和共享鎖

2022-03-07 10:00:06 字數 519 閱讀 6722

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

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

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

獨佔鎖共享鎖

獨佔鎖互斥

互斥共享鎖

互斥不互斥

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

mysql 獨佔鎖 mysql的獨佔鎖和共享鎖

當有多個事務同時更新一條sql時,mysql是如何處理的呢?很顯然,使用加鎖的方式,乙個事務獲得了鎖,進行操作,其他事務排隊乙個個等著,等當前這個事務執行完釋放鎖,其他事務獲取鎖取到鎖的進行操作。這裡的鎖就是獨佔鎖,也就是x鎖。那麼如果有查詢這一行資料時,是要加鎖嗎?不是的,mysql為了提高效能,...

Java 獨佔鎖 共享鎖

獨享鎖和共享鎖在你去讀c.u.t包下的reereentrantlock和reentrantreadwritelock你就會發現,它倆乙個是獨享乙個是共享鎖。獨享鎖 該鎖每一次只能被乙個執行緒所持有。共享鎖 該鎖可被多個執行緒共有,典型的就是reentrantreadwritelock裡的讀鎖,它的讀...

Java 獨佔鎖 共享鎖

獨享鎖和共享鎖在你去讀c.u.t包下的reereentrantlock和reentrantreadwritelock你就會發現,它倆乙個是獨享乙個是共享鎖。獨享鎖 該鎖每一次只能被乙個執行緒所持有。共享鎖 該鎖可被多個執行緒共有,典型的就是reentrantreadwritelock裡的讀鎖,它的讀...