面试真题

数据库 · 中等 · 阿里巴巴

MySQL为什么发生死锁,如何解决?

中等 数据库 🎤 阿里巴巴
参考答案
结论:死锁由两个及以上事务循环等待对方持有的锁导致,MySQL会自动检测并回滚。原因:事务A持有资源1锁请求资源2,事务B持有资源2锁请求资源1,互相等待。解决与预防:1.统一资源访问顺序(如按主键ID升序更新),破坏循环等待;2.缩短事务长度,避免事务内交互或长查询;3.降低隔离级别(如RC比RR少锁);4.设置锁等待超时innodb_lock_wait_timeout;5.使用乐观锁(版本号)替代悲观锁;6.出现死锁时InnoDB选择回滚代价小的事务,应用需捕获异常重试。示例:A更新id=1后更新id=2,B更新id=2后更新id=1即易死锁。
题目整理自公开面经,答案由校招宝自研生成,仅供参考