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的数据,是没有问题的。

  • 相关阅读:
    Java基础00-模块36
    Java基础00-反射35
    Java基础00-Stream流34
    Java基础00-函数式接口33
    Java基础00-方法引用32
    运用龙格库塔法解大雷洛数平板绕流问题
    LB 学习日记
    Numba学习日记 —— 2019-12-5
    文件的操作及相关异常的处理
    time模块的两个函数time.clock()和time.time()的区别
  • 原文地址:https://www.cnblogs.com/nmcc33/p/15205683.html
Copyright © 2011-2022 走看看