最近接触的间隙锁

innodb cyanprobe 6年前 (2019-04-18) 2294次浏览 已收录

前言:

 
写一下关于最近接触到的问题.

正文:

 
间隙锁问题: 间隙锁产生原因检索范围或者不存在的记录. 例如 检索id 为1-8,或者检索 id = 16 但此记录不存在.
无论rc还是rr隔离级别,检索不存在的记录都会产生间隙锁(即使是非范围的索引).锁定的范围是上一个id索引存在记录到下一个索引存在记录如 id = 13 存在 id = 17存在,那么该间隙锁范围为13-17,如果为自增主键,及时读锁住 id=16 这条记录将会导致 id>16不可插入,直到事务结束或者锁超时.
所以说在使用及时读来查询一个不存在记录的时候特别注意索引目标周围是否存在记录.否则可能出现大问题. 唯一性的数据尽量使用索引来保证. 考虑并发情况下使用及时读来查询是否存在不存在时插入是有风险的.
 


CyanProbe , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:最近接触的间隙锁
喜欢 (1)