在RR隔离级别下,表a有id,name两列,只有id一个聚簇索引,name列没有索引,两边同时执行update a set name = 'aaa' where id = 1,会不会出现这种情况,update是先获得S锁,再获得X锁,两个链接碰巧同时获得了这条记录的S锁,同时去求X锁,发生死锁呢?
在这个场景下对于同一个PK的记录,不会发生死锁
不看你的sql,单看你的这个s x锁的话,同时获取了S没问题,然后获取X的时候才会发生资源互斥的,肯定会有一个拿到X锁的,所以这个地方不会死锁,那么什么情况下会死锁?update xxx set A = ? where B = ? 和update xxx set B = ? where A = ? 这种形式的语句很可能会产生死锁的
innodb 是行锁,获取锁是原子操作,不会产生死锁的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。