mysql意向鎖的概念和用途

2021-08-07 03:16:01 字數 1008 閱讀 4092

鎖的粒度

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正在寫...