全栈开发
数据库
【Q226】数据库死锁是怎么产生的

数据库死锁是怎么产生的

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 227 (opens in a new tab)

Author 回答者: shfshanyue (opens in a new tab)

多个事务对资源的交替顺序访问,如

事务1,访问A表,A表锁住,访问B表,此时B表却被事务2锁住,等待 事务2,访问B表,B表锁住,访问A表,此时A表却被事务1锁住,等待

由此观之,此死锁出现的条件极为苛刻

  1. 并发,产生多个事务
  2. 顺序,对相同资源的不同顺序访问 (干嘛要不同顺序呀)
  3. 时机,恰好两个事物都刚刚走完了第一步

更多示例 (opens in a new tab)