文章插图
事务A 等值查询age=4,因为age是普通索引,所以会产生临键(next-key)锁(1,4]和(4,7],左开右闭原则 。
事务B 插入一个id=6、age=6的数据,因为age值在上面临键锁,范围内,所以也会堵塞 。
2、左开右闭原则按照上面的例子,如果事务B插入一条 id=6,age=1 的数据会不会堵塞呢,因为按照左开右闭原则,上面的age=1是开的,所以正常应该是可以插入的 。
但实际上你真是实践之后,你发现同样也会堵塞 。
通过实践之后,会发现,所谓的左开右闭原则,跟主键id有关系 。
上面的事务A 等值查询age=4,它的当前主键id=4,上一条记录主键id=1,下条记录主键id=7 。
如果插入 id<1, age 在(1,7)范围内,是 左闭右开原则 。即age=1能插入,age=7会堵塞 。
如果插入 1<id<7,age 在(1,7)范围内,是 左闭右闭原则 。即age=1会堵塞,age=7也会堵塞 。
如果插入 id>7,age 在(1,7)范围内,是 左开右闭原则 。即age=1会堵塞,age=7能插入 。
有关等值查询值不存在、普通索引范围的示例这里就不举了,跟上面的差不多,都会产生间隙锁 。
四、无索引示例1、等值查询值

文章插图
【分享MySQL记录锁、间隙锁、临键锁小案例演示,你学废了吗】事务A 等值查询 mobile = 8888884,因为mobile是无索引的,所以这个for update,变成表级排他(X)锁 。
事务B 因为事务A已经加了表级的排他锁,所以其它事务无法进行任何的增删改操作 。
2、范围查询

文章插图
事务A 等值查询 mobile > 8888884,因为mobile是无索引的,所以这个for update,变成表级排他(X)锁 。
事务B 因为事务A已经加了表级的排他锁,所以其它事务无法进行任何的增删改操作 。
推荐阅读
- 百万级数据下的mysql深度解析
- Mysql数据库tinyint,int,bigint,char,varchar究竟用哪个?
- 黑肌玉露怎么养,草玉露怎么养才饱满
- Win下部署多个MySQL数据库实例
- MySQL中常用的15个查询子句
- 分享新手自媒体的创作过程,怎么才能提高流量权益?
- 15个MySQL常用基本SQL语句
- 展现量60多万跌至几十,我走过的弯路经验分享给你们
- 数据库迁移有什么技巧?|分享强大的database迁移和同步工具
- 怎么在电脑上录制高清视频?轻松实现高清录制的教程分享
