在Next_Key Lock算法中,不仅仅锁定住所找到的索引,而且还锁定住这些索引覆盖的范围。因此在这个范围内的插入都是不允许的。这样就避免了在这个范围内插入数据导致的幻读问题。

delete from t1 where id = 10;

组合一:id列是主键,RC隔离级别

id = 10的记录加上X锁.

组合二:id列是二级唯一索引,RC隔离级别

若id列是unique列,其上有unique索引。那么SQL需要加两个X锁,一个对应于id unique索引上的id = 10的记录,另一把锁对应于聚簇索引上的[name=’*’,id=10]的记录。

组合三:id列是二级非唯一索引,RC隔离级别

id列索引上,满足id = 10查询条件的记录,均已加锁。同时,这些记录对应的主键索引上的记录也都加上了锁。与组合二唯一的区别在于,组合二最多只有一个满足等值查询的记录,而组合三会将所有满足查询条件的记录都加锁。

组合四:id列上没有索引,RC隔离级别

若id列上没有索引,SQL会走聚簇索引的全扫描进行过滤,由于过滤是由MySQL Server层面进行的。因此每条记录,无论是否满足条件,都会被加上X锁。

组合五:id列是主键,RR隔离级别

与组合一相同

组合六:id列是二级唯一索引,RR隔离级别

与组合五类似,组合六的加锁,与组合二:[id唯一索引,Read Committed]一致。两个X锁,id唯一索引满足条件的记录上一个,对应的聚簇索引上的记录一个。

组合七:id列是二级非唯一索引,RR隔离级别, 结果如下图:

其实这个多出来的GAP锁,就是RR隔离级别,相对于RC隔离级别,不会出现幻读的关键。确实,GAP锁锁住的位置,也不是记录本身,而是两条记录之间的GAP。

最新文章

  1. 代码-->发呆
  2. git 常用操作
  3. JavaScript基础---语言基础(4)
  4. 求一个数组中最小的K个数
  5. 3.8 spring - AbstractBeanDefinition 介绍
  6. WE-1202 (JGX-X5 v1.3)刷openwrt
  7. NPOI使用手册
  8. bzoj3230
  9. HorizontalScrollView做页卡的一个小记录
  10. _beginthread和CreatThread的区别
  11. diy51单片机最小系统------从零件到51整体测试成功小白篇
  12. Express 配置 https / 443 安全链接
  13. 【移动开发】AIDL中callback的实现
  14. 循环输入到列表的基础方法 -----python-----
  15. 比Kafka Mangaer更优秀的开源监控工具-Kafka Eagle
  16. day8 文件操作
  17. (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
  18. Git修改已经提交的注释或日志
  19. 【GIS】ArcGIS JS 4.X
  20. Charles 对于线上比一比抓包怎么修改

热门文章

  1. 氵0x a
  2. Spark如何进行动态资源分配
  3. 使用原生js模拟jQuery选择器,实现new方法,兼容ie5
  4. 【Azure媒体服务 Azure Media Service】Azure Media Service中Stream Endpoint 说明 (流式处理终结点)
  5. MySQL数据库基础-3-SQL 基本概念
  6. linux(CentOS7)_离线_mysql安装
  7. poj2187 Beauty Contest (凸包 + 旋转卡壳)
  8. 【译】值得推荐的十大React Hook 库
  9. Mysql优化建议
  10. C语言积累一点点