找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4264

积分

0

好友

554

主题
发表于 1 小时前 | 查看: 4| 回复: 0

下面这道关于 MySQL死锁 的选择题,看看你能不能选对:

A、MyISAM 引擎更容易产生死锁

B、死锁只会发生在共享锁之间

C、提高隔离级别可以杜绝死锁

D、InnoDB 会自动检测并主动回滚代价较小事务

每日一题

先说结论:D 是正确的。InnoDB 引擎内部有死锁检测机制,当两个或多个事务互相等待对方持有的锁时,InnoDB 会自动介入,选择回滚代价较小的事务来打破僵局,让另一个事务可以继续执行。

再来看另外三个选项为什么不对:

  • A 错在引擎。MyISAM 只支持表级锁,事务支持也有限,产生死锁的概率反而不如 InnoDB 高。InnoDB 因为支持行级锁和事务,多个事务交叉锁定不同行时更容易发生死锁。
  • B 错在锁类型。死锁不一定只发生在共享锁之间,排他锁与排他锁、共享锁与排他锁相互等待,同样可能形成死锁环。
  • C 错在逻辑。提高隔离级别本质上是加强了锁的粒度和范围,比如 RR 级别下的间隙锁反而会增加锁冲突的可能,不仅不能杜绝死锁,某些场景下还可能增加死锁概率。

所以这道题的关键在于理解 InnoDB 的死锁检测机制——它不是预防所有死锁发生,而是在死锁发生后主动破局。




上一篇:Hermes Agent低成本多模型配置:DeepSeek识图生图全打通
下一篇:长鑫科技今日市值3.54万亿超越腾讯成中国最大上市公司
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-14 06:52 , Processed in 1.089397 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表