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

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

来源网络-互不放手

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

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