Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理( 二 )


Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
插入成功 , 没有阻塞 。
2.count=3,id=34:
 
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
 
插入失败 , 阻塞 。
3.count=7,id=76:
 
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
插入失败 , 阻塞 。
4.count=7,id=78:
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
插入成功 , 没有阻塞 。
验证GAP:
 
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
 
这下是真的结束了 , 大家可以散了 。
什么?还没走?那么来传授一个面试装13技巧:
如果是更新语句 , 尽量以主键为条件 , 唯一约束也可以 , 因为主键和唯一约束都只会把更新的那一行加X锁 。再不济 , 也要是以普通索引去更新 。
大忌:以非索引字段去更新 , 这样会导致所有的列都加X锁 , 此时所有的 insert/update 都无法操作 。
验证(count已经改为非索引):
 
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
可以看到 , 阻塞住了 。
查询INNODB_LOCKS:
 
Next-Key锁的分析与调试 MySQL5.7 解决幻读的原理

文章插图
 
supremum pseudo-record:表示无穷大




推荐阅读