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

2021-10-17 15:14:28 字數 530 閱讀 3419

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

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

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

獨佔鎖共享鎖

獨佔鎖互斥

互斥共享鎖

互斥不互斥

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

原文:

mysql的獨佔鎖和共享鎖

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

mysql的悲觀鎖 mysql悲觀鎖

1.create database lock test db 2.create user test 1 identified by 123456 3.grant all privileges on lock test db.to test 1 identified by 123456 4.flush...

mysql間隙鎖 mysql的間隙鎖

最近學習了mysql的各種鎖,有點暈,打算通過文章的方式捋一捋。在學習了mvcc後,我就想,他已經很好的解決了併發讀寫了,但我也知道innodb提供了多種型別的鎖,所以很好奇這些鎖有什麼用,為什麼這些鎖的功能是mvcc做不到的?本文討論的都是rr級別下的鎖 我先建立乙個表,並插入幾行資料,如下圖 插...