上篇文章《sysbench花式采坑之二:自增值导致的主键冲突》遗留了一个问题,为什么在RR级别下delete一条id不存在的列,再在另一个事务用同样的id插入一条数据会发生锁等待,在RC级别下就不会出现锁等待?
| 自增值导致的锁等待
看到RR级别和RC级别下不同的锁等待表现,第一个应该想到的原因就是gap锁。
我们知道gap锁会阻塞insert,那么delete会产生gap锁吗?借用mysql 8.0新加入的performance_schema.data_locks观察一下。
首先准备测试所用的表结构和表数据。
id为主键列,age为索引列,首先我们删除id为12的这条数据,观察一下锁信息。