InnoDB支援事務,支援行鎖和表鎖,MyISAM不支援事務,只支援表鎖。這裡只介紹InnoDB。
InnoDB實作了以下兩種類型的行鎖定。
共享鎖定(S):允許一個事務去讀取一行,並阻止其他事務獲得相同資料集的排他鎖。
排他鎖(X):允許獲得排他鎖的事務更新數據,阻止其他事務取得相同數據集的共享讀鎖和排他寫鎖。
另外,為了允許行鎖和表鎖共存,實現多粒度鎖機制,InnoDB還有兩種內部使用的意向鎖(Intention Locks),這兩種意向鎖都是表鎖。
意向共享鎖定(IS):交易打算將資料行加行共享鎖定,而交易在給一個資料行加上共享鎖前必須先取得該表的IS鎖定。
意向排他鎖(IX):事務打算將資料行加行排他鎖,事務在給一個資料行加排他鎖前必須先取得該表的IX鎖。
InnoDB行鎖定模式相容性清單
請求鎖定模式
S IS |
X | 衝突 | 衝突 | 衝突 |
IX | 衝突 | |||
相容 | 相容 | IS | 衝突 | |
兼容 | 兼容 | 如果一個事務請求的鎖定模式與當前的鎖兼容,InnoDB就將請求反的鎖授予該事務兼容;該事務就要等待鎖釋放。 | 說明: | |
意向鎖定是InnoDB自動加的,不需要使用者介入。 | 對於UPDATE、DELETE和INSERT語句,InnoDB會自動將涉及資料集加上排他鎖(X)。 | 對於普通SELECT語句,InnoDB不會加上任何鎖定。 |
InnoDB行鎖是透過給索引上的索引項加鎖來實現的,因此InnoDB這種行鎖實現特點意味著:只有透過索引條件檢索數據,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖。