MYSQL插入意向锁死锁.docxVIP

  • 3
  • 0
  • 约1.94千字
  • 约 5页
  • 2023-08-03 发布于北京
  • 举报
插入意向锁死锁 本章介绍一种比较不常见的死锁现象,和我们通常理解的死锁发生过程不太一样,能使读者对死锁现象有新的理解。 问题现象 死锁这种情况大家肯定都遇到过,第34章和第35章也介绍了两个死锁案例,本章的案例是客户在生产系统中遇到一个死锁现象,但是不能理解在这种情况下为何会发生死锁。通常死锁发生的情况如图36-1所示。 图36-1(图片来自网络) 当两个事务都试图获取另一个事务已经拥有的锁时,就会发生死锁。 事务1(Transaction 1)在记录A(Record A)上获得锁,事务2(Transaction 2)在记录B(Record B)上获得锁。随后每个事务都尝试获取另一个事务持有的锁将触发死锁。 但在这个案例中死锁的产生和上述所讲的情况有些不一样,我们来模拟一下。 (1)环境信息 事务隔离级别:RR MySQL版本:8.0.13 (2)复现情况 表结构及数据如下: 操作步骤如表36-1所示。 表36-1 在Session 1中执行了UPDATE语句,随后在Session 2中执行了一个全表查询并且带上IN SHARE MODE添加了共享锁,接下来在Session 1中再次执行了INSERT语句,同时Session 2直接报出死锁事务被回滚了。 问题分析 针对上述情况,令人疑惑的地方有如下几点: 两个事务之间是如何加锁的? 为何产生了死锁? 发生死锁后为什么是Sessio

文档评论(0)

1亿VIP精品文档

相关文档