星海

MySQL · 单选题 · 第 39 题

Java 后端开发面试 · 第 39 题

两个事务在 InnoDB 中发生死锁时,MySQL 默认会怎么处理?

  1. A主动检测到死锁,回滚其中代价较小的事务;另有锁等待超时参数兜底
  2. BMySQL 不会检测死锁,只能由运维人员手动重启实例来解除
  3. C同时提交这两个事务,由后提交的那个事务覆盖先提交事务所做的修改
  4. D两个事务永远互相等待下去,直到客户端主动断开数据库连接

答案

A A. 主动检测到死锁,回滚其中代价较小的事务;另有锁等待超时参数兜底

解析

innodb_deadlock_detect 默认开启,InnoDB 维护等待图,一旦发现环,就选择一个回滚(通常是修改行数少的),另一个继续执行,被回滚的一方收到 1213 错误,应用应当重试。高并发热点行场景下,死锁检测本身会消耗大量 CPU。innodb_lock_wait_timeout 默认 50 秒。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。