鎖的粒度
a. 表鎖(table lock)
對整個表加鎖,影響標準的所有記錄。通常用在ddl語句中,如delete table,alter table等。
b. 行鎖(row lock)
對一行記錄加鎖,只影響一條記錄。通常用在dml語句中,如insert, update, delete等。
很明顯,表鎖影響整個表的資料,因此併發性不如行鎖好。
- 意向鎖(intention lock)
因為表鎖覆蓋了行鎖的資料,所以表鎖和行鎖也會產生衝突。如:
a. trx1 begi
b. trx1 給 t1 加x鎖,修改表結構。
c. trx2 begin
d. trx2 給 t1 的一行記錄加s或x鎖(事務被阻塞,等待加鎖成功)。
trx1要操作整個表,鎖住了整個表。那麼trx2就不能再對t1的單條記錄加x或s鎖,去讀取或修這條記錄。
為了方便檢測表級鎖和行級鎖之間的衝突,就引入了意向鎖。
a. 意向鎖分為意向讀鎖(is)和意向寫鎖(ix)。
b. 意向鎖是表級鎖,但是卻表示事務正在讀或寫某一行記錄,而不是整個表。
所以意向鎖之間不會產生衝突,真正的衝突在加行鎖時檢查。
c. 在給一行記錄加鎖前,首先要給該錶加意向鎖。也就是要同時加表意向鎖和行鎖。
採用了意向鎖後,上面的例子就變成了:
a. trx1 begin
b. trx1 給 t1 加x鎖,修改表結構。
c. trx2 begin
d. trx2 給 t1 加ix鎖(事務被阻塞,等待加鎖成功)
e. trx2 給 t1 的一行記錄加s或x鎖.
- 表鎖的相容性矩陣
is ix s x
is + + + –
ix + + - -
s + - + -
x - - - -
+ 代表相容, -代表不相容
a. 意向鎖之間不會衝突, 因為意向鎖僅僅代表要對某行記錄進行操作。在加行鎖時,會判斷是否衝突。
mysql共享鎖 排他鎖 意向鎖
mysql鎖機制分為表鎖和行鎖,其中行鎖又包括了共享鎖與排他鎖。又稱為讀鎖 s鎖 當有多個事務時,多個事務對於同一資料可以共享乙個鎖,都能訪問到資料,但是其他事務只能讀不能寫。又稱為寫鎖 x鎖 當有多個事務時,排他鎖不能與其他鎖並存,乙個事務獲取了一行資料的排他鎖,其他事務就不能再獲取該行的其他鎖,...
MySQL 共享鎖 互斥鎖 意向鎖。
經常聽到資料庫的鎖機制,不同的資料庫的不同實現不同,聽多了就頭疼了,今天就把mysql的鎖整的明明白白 首先想一下為什麼我們會需要鎖,其實就是為了解決併發運算元據的,是一種控制併發的機制。樂觀鎖和悲觀鎖其實是兩種思想,用來指導實現鎖的功能的不同實現思想,在這兩種指導思想下產生了對應的鎖 我們可以對一...
意向鎖的作用
在了解innodb事務併發控制的時候,裡面提到了意向鎖 intention lock 這裡簡單做下總結 在innodb的使用場景中,裡面有實現了行鎖,具體有對行的讀鎖,寫鎖。另外,如果對乙個表作一些統一的操作,表的層面,有表層級的讀鎖,寫鎖。那這個意向鎖是幹嘛用的?我們假設乙個場景,乙個事務a正在寫...