开发者社区> 问答> 正文

mysql,innodb引擎的情况下,update同一条记录会不会死锁?

在RR隔离级别下,表a有id,name两列,只有id一个聚簇索引,name列没有索引,两边同时执行update a set name = 'aaa' where id = 1,会不会出现这种情况,update是先获得S锁,再获得X锁,两个链接碰巧同时获得了这条记录的S锁,同时去求X锁,发生死锁呢?

展开
收起
czccumt 2018-02-07 12:11:45 5231 0
3 条回答
写回答
取消 提交回答
  • 阿里巴巴高级技术专家。在阿里长期负责高可用相关领域工作,包括评价、店铺、商家事业部等双 11 技术保障工作,从 2015 年开始,在阿里百川业务,基于阿里云,为移动互联网应用提供高可用技术及产品,参与了 EWS 等高可用领域产品架构设计,积累了云上和云下的全面稳定性经验。

    在这个场景下对于同一个PK的记录,不会发生死锁

    2019-07-17 21:58:18
    赞同 展开评论 打赏
  • 一名路过的小码农,大神请多多指教

    不看你的sql,单看你的这个s x锁的话,同时获取了S没问题,然后获取X的时候才会发生资源互斥的,肯定会有一个拿到X锁的,所以这个地方不会死锁,那么什么情况下会死锁?update xxx set A = ? where B = ? 和update xxx set B = ? where A = ? 这种形式的语句很可能会产生死锁的

    2019-07-17 21:58:18
    赞同 展开评论 打赏
  • 会分期首席架构师,曾任知乎、AppAnnie 高级工程师及 Team Lead。

    innodb 是行锁,获取锁是原子操作,不会产生死锁的。

    2019-07-17 21:58:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载
阿里云企业级自治数据库 RDS 详解 立即下载
阿里云MySQL云数据库产品体系介绍 立即下载

相关镜像