zoukankan      html  css  js  c++  java
  • mysql更新一条不存在的数据时给索引加锁的位置

    场景,事务1更新一个id=5的数据,id=5不存在,事务2插入id=5的数据,事务2会不会被事务1阻塞,换句话说,事务1对不存在的id=5的数据行锁加的位置在哪里?

    事务2被阻塞:

     

    通过实验我们发现,如果当前表最大id小于5,那么如果更新id=5的不存在数据时,是在大于当前表行最大id的后面范围上加的锁,事务2插入id=5或者id>5的数据都会阻塞。

    ==================================================================

    事务1更新不存在的id=5时,事务2无法插入id=5的数据:

    如果id=5的数据是在表中id连续存在的情况下缺失的一行,比如说表中id分别是1,2,3,4,6,7,8,那么事务1加的锁是对id=5加的,虽然他不存在,而事务2这时如果去插入id=9的数据是没有影响的,

    当然,如果事务2要去插入id=5的数据那肯定还是要被阻塞的;

     

    =======================================================================

    事务1更新不存在的id=5的数据时,如果当前表的id是1,2,3,4,7这种,那么事务2连id=6的数据都插入不了,说明事务1加锁是一个区间

    如果id情况是1,2,3,4,7,8这种情况的话:如果事务1更新id=5,那么事务2想要插入id=5或者id=6的数据,都会被阻塞,所以可以任务,事务1是锁住了(4,7)这一段区间。

    当然,如果事务2要插入id=9的数据,是没有问题的。

  • 相关阅读:
    精确覆盖DLX算法模板另一种写法
    Hdu3498-whosyourdaddy(精确覆盖模板题)
    精确覆盖DLX算法模板
    Object2Map
    Use ResourceBundle read properties file.
    Kendo UI Example(grid)
    Kendo 日期控件
    Spring mvc 中文乱码问题解决方法
    Thread communication java.util.concurrent.locks.Condition 用法(二)
    Thread communication java.util.concurrent.locks.Condition 用法(一)
  • 原文地址:https://www.cnblogs.com/nmcc33/p/15205683.html
Copyright © 2011-2022 走看看