如何快捷的判断一批mysql添加索引会不会锁表中不存在的或 close 的mysql添加索引会不会锁表

1.有t_user表用户量大概500万,里面有几個字段和钱相关现在由于业务需要对表中update_time添加一个mysql添加索引会不会锁表,请问一下直接添加mysql添加索引会不会锁表,会导致线上t_user表锁表嘛

在MySQL的使用过程中对SQL加锁的类型經常感到疑惑,这让死锁分析也变得举步维艰因此需要将MySQL的各种SQL在各个隔离级别下加的锁进行分析,以免再次分析的时候还感到疑惑吔方便用于查询。

本次分析对SQL的删除语句进行分析主要从以下几种情况进行分析:

  1. 非唯一mysql添加索引会不会锁表删除一条存在的记录
  2. 唯一mysql添加索引会不会锁表删除一条存在的记录
  3. 主键删除一条存在的记录
  4. 非唯一mysql添加索引会不会锁表删除一条不存在记录
  5. 唯一mysql添加索引会不会锁表删除一条不存在的记录
  6. 主键删除一条不存在的记录
  7. 不同的SQL根据主键删除2条记录
  8. 非唯一mysql添加索引会不会锁表删除一条已经标记删除的记录
  9. 唯一mysql添加索引会不会锁表删除一条已经标记删除的记录
  • 表的记录,唯一mysql添加索引会不会锁表和普通mysql添加索引会不会锁表的表结构均一样
  • 测試的事务隔离级别为RR

根据非唯一mysql添加索引会不会锁表删除一条存在记录

根据非唯一mysql添加索引会不会锁表进行删除的时候,锁情况为:

根據唯一mysql添加索引会不会锁表删除一条存在记录

根据唯一mysql添加索引会不会锁表进行删除的时候锁情况为:

根据主键删除一条存在记录

根据主键进行删除的时候,锁情况为:

  1. 1 row lock(s):就主键记录上的行锁没有gap,因此为1个

根据非唯一mysql添加索引会不会锁表删除一条不存在 记录

根据非唯┅mysql添加索引会不会锁表删除一条 不存在 记录锁情况为:

根据唯一mysql添加索引会不会锁表删除一条不存在 记录

根据唯一mysql添加索引会不会锁表刪除一条 不存在 记录,发现和非唯一mysql添加索引会不会锁表一样,锁情况为:

根据主键删除一条不存在 记录

根据主键删除一条 不存在 记录,发现囷非唯一mysql添加索引会不会锁表一样锁情况为:

根据主键删除两条存在的记录

有 5 , 9 这两条记录
有 4 10 这两条记录

根据主键删除两条的时候,使用in的锁情况为:

  1. 2 row lock(s):两条主键记录上的行锁没有gap,因此为2个

根据主键删除两条的时候使用>,<,>=,<=,比较符号的锁情况为:

  1. 无论如何,匹配到2条記录因此必须会有2 row lock(s)
  2. 如果只有>,<,那么毫无疑问是不会锁定两个边界的记录,因此他只会锁定边界到边界内的整个范围锁的类型为next key,此時为2 lock struct(s) 3 row lock(s)

非唯一mysql添加索引会不会锁表删除一条已经标记删除的记录

非唯一mysql添加索引会不会锁表删除一条已经标记删除的记录的锁情况为:

  • 加鎖成功时:3 lock struct(s),持有IX,next key 锁和gap锁,这个和非唯一mysql添加索引会不会锁表删除一条不存在的记录是基本一样的多了个因Sess1 提交成功后多获得的next key 锁。

唯一mysql添加索引会不会锁表删除一条已经标记删除的记录

唯一mysql添加索引会不会锁表删除一条已经标记删除的记录的锁情况为:

  • 加锁成功时:3 lock struct(s)持有IX,next key ,和gap锁和非唯一mysql添加索引会不会锁表删除一条标记为已删除的记录的情况一模一样。

  1. 在非唯一mysql添加索引会不会锁表的情况下删除一条存在的记录是有gap锁,锁住记录本身和记录之前的gap
  2. 在唯一mysql添加索引会不会锁表和主键的情况下删除一条存在的记录因为都是唯一值,进行删除的时候是不会有gap存在
  3. 非唯一mysql添加索引会不会锁表,唯一mysql添加索引会不会锁表和主键在删除一条不存在的记录均会在这个区間加gap锁
  4. 通过非唯一mysql添加索引会不会锁表和唯一mysql添加索引会不会锁表去删除一条标记为删除的记录的时候,都会请求该记录的行锁同时锁住记录之前的gap
  5. RC 情况下是没有gap锁的,除了遇到唯一键冲突的情况如插入唯一键冲突。

我要回帖

更多关于 mysql添加索引会不会锁表 的文章

 

随机推荐