记录一次Mysql update死锁的原因

做~自己de王妃 提交于 2019-11-26 13:20:58

死锁的发生

sql大概是这样的
A1 update 表 set 字段 = (select * from 表 where 主键 = ‘’)…(再做某些处理)
A2 update 表 set 字段 = (select * from 表 where 主键 = ‘’)…(再做某些处理)

这条sql单独执行的时候没有问题,但当两条相同的主键都要update时就发生了死锁,最后分析如果有误望大神指正(MySQL,innodb)

A1 对 表加共享锁,
A2 也对 表 加共享锁,
当 A1 的 select 执行完时执行 update,
根据锁机制,
A1 的共享锁需要升级到排他锁才能执行接下来的 update
.在升级排他锁前,
必须等 表 上的其它共享锁,也就是A2释放,
同时,A2 也在等 A1 的共享锁释放。于是死锁产生了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!