當有多個事務同時更新一條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裡的讀鎖,它的讀...