zoukankan      html  css  js  c++  java
  • mysql中delete from t1 where id = 10加锁状况叙述

    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

  • 相关阅读:
    磁盘缓存
    算法与追MM(转)
    人人都能上清华(转)
    软件加密技术和注册机制原理攻略(转)
    计算二重定积分
    C++运算符重载
    STL中list的用法
    累了??放松一下,看几张关于程序员的几张搞笑图片
    解决来QQ消息后歌曲音量降低问题
    搞ACM的你伤不起(转)
  • 原文地址:https://www.cnblogs.com/lbg-database/p/9835182.html
Copyright © 2011-2022 走看看