MySQL InnoDB支持三種行鎖定方式:
l 行鎖(Record Lock):鎖直接加在索引記錄上面,鎖住的是key垦搬。
l 間隙鎖(Gap Lock):鎖定索引記錄間隙爹梁,確保索引記錄的間隙不變腹躁。間隙鎖是針對事務(wù)隔離級(jí)別為可重復(fù)讀或以上級(jí)別而已的纱皆。
l Next-Key Lock :行鎖和間隙鎖組合起來就叫Next-Key Lock同眯。
默認(rèn)情況下绽昼,InnoDB工作在可重復(fù)讀隔離級(jí)別下,并且會(huì)以Next-Key Lock的方式對數(shù)據(jù)行進(jìn)行加鎖须蜗,這樣可以有效防止幻讀的發(fā)生硅确。Next-Key Lock是行鎖和間隙鎖的組合,當(dāng)InnoDB掃描索引記錄的時(shí)候明肮,會(huì)首先對索引記錄加上行鎖(Record Lock)菱农,再對索引記錄兩邊的間隙加上間隙鎖(Gap Lock)。加上間隙鎖之后晤愧,其他事務(wù)就不能在這個(gè)間隙修改或者插入記錄大莫。
Gap Lock在InnoDB的唯一作用就是防止其他事務(wù)的插入操作,以此防止幻讀的發(fā)生官份。
詳見:http://blog.sina.com.cn/s/blog_a1e9c7910102vnrj.html