大家好,我是javapub。

接上篇提到了锁,《InnoDB有哪些锁类型》。这么多的锁,你有遇到过死锁吗?

死锁是在事务数据库中会发生的一种特殊现象,多个事务在执行过程中,相互等待对方持有的资源,导致这些事务都无法继续执行。简单来说,就是两个或多个事务陷入了一个循环等待的状态,每个事务都在等待其他事务释放资源。

比如这个蛇和青蛙互不放手。

2024了,还有人在问为甚死锁?_死锁

死锁通常由以下四种情况同时出现时引起:

  1. 互斥条件(Mutual Exclusion):
  • 指某些资源(如数据库中的记录)一次只能被一个事务占用。
  1. 持有和等待条件(Hold and Wait):
  • 指一个事务至少持有一个资源,并在等待获取其他事务持有的资源。
  1. 不可剥夺条件(No Preemption):
  • 指已经分配给一个事务的资源,在事务使用完毕之前,不能被强行剥夺。
  1. 循环等待条件(Circular Wait):
  • 指事务之间形成了一个闭环,每个事务都在等待下一个事务所持有的资源。