一个 MySQL 数据库死锁的案例和解决方案

码志 at 
一个 MySQL 数据库死锁的案例和解决方案的配图
本文介绍了一个 MySQL 数据库死锁的案例和解决方案。场景生产环境出了一个偶现的数据库死锁问题,导致少部分业务处理失败。分析特征之后,发现是多个线程并发执行同一个方法,更新关联的数据时可能会出现,把场景简化概括一下:有一个数据表 tb1,主键名 id,有两条 id 分别为 A1 和 A2 的记录,对应的外键 fk_biz_no 相同;方法 myFunc,整体是一个事务;方法 myFunc 里的逻辑是先更新 tb1 里的一条记录,执行一些逻辑后,再更新该记录的外键对应的所有记录;这样 线程 1 和 线程 2 并发执行 myFunc 方法时,示意如下:线程 1 先更新 A1,此时会对 A1 所在……