MySQL 共享排他鎖 mysql 共享排他鎖

2021-10-18 10:02:06 字數 1343 閱讀 3124

1、基礎知識

共享鎖又叫s鎖(share locks),共享鎖就是多個事務對於同一資料可以共享一把鎖,都能訪問到資料,但是只能讀不能修改。

排他鎖又叫x鎖(exclusive locks,記為x鎖),排他鎖就是不能與其他鎖並存,只有等待鎖釋放完成以後其他事務才能得到鎖。

下面是共享鎖與排他鎖的互斥關係

s          x

s      相容      互斥

x      互斥      互斥

2、練習題

有autoid表資料如下

a、共享鎖(select  ...... lock in share mode;)

sessiona

sessionb

begin;

select * from test.autoid where id=1 lock in share mode;

begin;

update test.autoid set `name`="***x" where id=1;

鎖超時(圖a)

sessiona

sessionb

begin;

begin;

select * from test.autoid where id=1 lock in share mode;

select * from test.autoid where id=1 lock in share mode;

有資料有資料

(圖b)

可以從上圖(a)中看到,因為事務a對資料1加上了共享鎖,並且當時事務a的鎖並沒有進行釋放,所以事務b對資料進行更新操作的時候是不可以進行操作的。在圖b當中我們可以看到,當事務a對資料進行了加鎖,這個時候事務b是可以讀取資料的,不需要進行阻塞。但是如果這個時候事務a對資料進行了更改,並且事務沒有提交的情況下,那麼這個時候事務b讀取的資料會是舊資料而不是新資料。由此可以看出,共享鎖是:讀讀可以並行;

b、排他鎖(select   ......  for  update;)

sessiona

sessionb

begin;

select * from test.autoid where id=1 for update;

begin;

select * from test.autoid where id=1 for update;

阻塞,等待a事務執行

從上圖可以看到,對資料加上了排他鎖以後,即使事務b是對事務a進行讀取操作也是無法進行了,這也正應正了剛才所說的,排他鎖與其他鎖是互斥的,排他鎖:寫寫/讀寫必須互斥;

mysql排他鎖 mysql共享鎖與排他鎖

mysql鎖機制分為表級鎖和行級鎖,本文就和大家分享一下我對mysql中行級鎖中的共享鎖與排他鎖進行分享交流。共享鎖又稱為讀鎖,簡稱s鎖,顧名思義,共享鎖就是多個事務對於同一資料可以共享一把鎖,都能訪問到資料,但是只能讀不能修改。排他鎖又稱為寫鎖,簡稱x鎖,顧名思義,排他鎖就是不能與其他所並存,如乙...

Mysql共享鎖 排他鎖

我之前專程寫了mysql中myisam和innodb區別 和mysql儲存引擎 這裡主要寫一些影響鎖相關的內容 mysql 在5.5之前預設使用 myisam 儲存引擎,之後使用 innodb 檢視當前儲存引擎 show variables like storage engine myisam 運算...

mysql共享鎖與排他鎖

mysql鎖機制分為表級鎖和行級鎖,本文就和大家分享一下我對mysql中行級鎖中的共享鎖與排他鎖進行分享交流。共享鎖又稱為讀鎖,簡稱s鎖,顧名思義,共享鎖就是多個事務對於同一資料可以共享一把鎖,都能訪問到資料,但是只能讀不能修改。排他鎖又稱為寫鎖,簡稱x鎖,顧名思義,排他鎖就是不能與其他所並存,如乙...