一:innodb行鎖是如何實現:算法
1:innodb的行鎖是經過給索引上的索引項加鎖來實現的索引
2:經過索引進行數據檢索,innodb纔會使用行級鎖,不然innodb會使用表鎖(鎖住索引的全部記錄)innodb
二:innodb算法之鎖(臨鍵鎖、間隙鎖、記錄鎖):都是根據innodb存儲引擎im
1:臨鍵鎖(Next-Key Locks):當SQL執行按照索引進行數據的檢索時,且查詢條件爲範圍查詢(between 、and、 >、<等),且有數據命中時,該SQL語句加上的行鎖爲Next-Key Locks數據
具體實現:鎖住命中記錄區間 + 下一個區間(左開右閉)查詢
臨鍵鎖以下圖所示:db
2:間隙鎖(Gap-Lock):範圍查詢或者是等值查詢,且記錄不存在,當記錄不存在,臨鍵鎖退化成GAP鎖,且gap鎖之間不衝突,img
鎖住的範圍是左開右開區間co
間隙鎖以下圖所示:存儲引擎
3:記錄鎖(Record-Lock)
當SQL執行按照惟一性(primary key, unique )索引進行數據的檢索時,且查詢條件等值匹配且查詢的數據命中存在,這時SQL語句加上的鎖爲記錄鎖
具體實現:鎖住具體索引的索引項
記錄鎖以下圖所示