mysql delete锁_MySQL DELETE 删除语句加锁分析

  • Post author:
  • Post category:mysql


MySQL DELETE 删除语句加锁分析

http://www.fordba.com/lock-analyse-of-delete.html

1. 前言

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

本次分析对SQL的删除语句进行分析,主要从以下几种情况进行分析:非唯一索引删除一条存在的记录

唯一索引删除一条存在的记录

主键删除一条存在的记录

非唯一索引删除一条不存在记录

唯一索引删除一条不存在的记录

主键删除一条不存在的记录

不同的SQL根据主键删除2条记录

非唯一索引删除一条已经标记删除的记录

唯一索引删除一条已经标记删除的记录

在使用之前需要打开innodb lock monitor,这样在查看 engine innodb status 的时候可以更加清晰的查到到锁的情况

2. SQL的加锁分析

相关表结构普通索引表结构唯一索引表结构表的记录,唯一索引和普通索引的表结构均一样

测试的事务隔离级别为RR。

2.1 删除SQL加锁分析

根据非唯一索引删除一条存在记录

根据非唯一索引进行删除的时候,锁情况为:4 lock struct(s):4种锁结构,分别为IX,idx_c1和主键的行锁,还有idx_c1的gap锁

3 row lock(s):有3个行锁,除去IX的都是算在row lock里面

根据唯一索引删除一条存在记录

根据唯一索引



版权声明:本文为weixin_39684454原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。