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鎖,顧名思義,排他鎖就是不能與其他所並存,如乙...