大家好,我是javapub。
接上篇提到了锁,《InnoDB有哪些锁类型》。这么多的锁,你有遇到过死锁吗?
死锁是在事务数据库中会发生的一种特殊现象,多个事务在执行过程中,相互等待对方持有的资源,导致这些事务都无法继续执行。简单来说,就是两个或多个事务陷入了一个循环等待的状态,每个事务都在等待其他事务释放资源。
比如这个蛇和青蛙互不放手。
死锁通常由以下四种情况同时出现时引起:
- 互斥条件(Mutual Exclusion):
- 指某些资源(如数据库中的记录)一次只能被一个事务占用。
- 持有和等待条件(Hold and Wait):
- 指一个事务至少持有一个资源,并在等待获取其他事务持有的资源。
- 不可剥夺条件(No Preemption):
- 指已经分配给一个事务的资源,在事务使用完毕之前,不能被强行剥夺。
- 循环等待条件(Circular Wait):
- 指事务之间形成了一个闭环,每个事务都在等待下一个事务所持有的资源。