MySQL中間隙鎖和離間鎖都是事務(wù)并發(fā)控制中使用的鎖機(jī)制。它們的主要區(qū)別在于鎖定的區(qū)域。下面分別介紹。
中間隙鎖:當(dāng)一個(gè)事務(wù)在查詢一個(gè)沒(méi)有任何索引的列時(shí),在滿足條件的行(lock rows)周?chē)拈g隙(gap)中會(huì)添加中間隙鎖。這樣做的目的是為了防止其他事務(wù)在這些間隙中插入新的數(shù)據(jù)行,以影響這個(gè)事務(wù)的查詢結(jié)果。當(dāng)事務(wù)提交或回滾后,這個(gè)鎖會(huì)被釋放。
離間鎖:當(dāng)一個(gè)事務(wù)查詢或更新一張表中的數(shù)據(jù)時(shí),MySQL會(huì)在這個(gè)表中找到所有滿足條件的行并對(duì)它們進(jìn)行鎖定,這些被鎖定的行一起組成了一個(gè)鎖定范圍(gap)。離間鎖相比中間隙鎖,鎖定的范圍更大,鎖定的行數(shù)更多。當(dāng)事務(wù)提交或回滾后,這個(gè)鎖也會(huì)被釋放。
需要注意的是,對(duì)于同一行數(shù)據(jù)來(lái)說(shuō),中間隙鎖和離間鎖都可以使用,具體使用哪一種鎖機(jī)制,由SQL語(yǔ)句的執(zhí)行計(jì)劃自行決定。
下一篇mysql中降序怎么做