作者:0龙麒麟0 | 来源:互联网 | 2023-09-24 06:51
关于mysql next-key锁的一些个人理解
(2016-02-18 18:41:34)
mysql运维
我们都知道,next-key锁是mysql默认的锁,是记录锁和在此索引记录之前的gap上的锁的结合,这个锁的作用是为了防止幻读,导致主从复制的不一致。当我们具体where条件指定某一个值时,它也会锁住这个值的前后范围。
比如有一个表child,id列上有90,100,102,
当我们执行select * from chlid where id=100 for update
时,mysql会锁住90到102这个区间,一开始有点疑惑就是其实mysql只需要去锁定id=100这个值就可以防止幻读了,为什么还要去锁定相邻的区间范围呢?
这是为了预防另一种情况的发生。
比如当我们执行 select * from chlid where id>100 for
update时,这时next-key锁就派上用场了。
索引扫描到了100和102这两个值,但是仅仅锁住这两个值是不够的,因为当我们在另一个会话插入id=101的时候,就有可能产生幻读了。
所以mysql必须锁住[100,102)和[102,无穷大)这个范围,才能保证不会出现幻读。
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。