美文网首页
MySQL Innodb死锁

MySQL Innodb死锁

作者: 哓晓的故事 | 来源:发表于2018-07-27 17:11 被阅读0次
  • UPDATE MERGE INDEX DEADLOCK
update pc_coupon_0200
    set 和索引没关系
    where
    code = '4ab5bf23-d09e-4947-8e83-4e6619c1f750'
    and user_id = 29096550200

update pc_coupon_0200
    set 和索引没关系
    where
    code = '0bd0752c-cf8f-4bd5-89a0-70d12fd26dd3'
    and user_id = 29096550200
code和user_id都是索引

INNODB UPDATE的原理,行级锁的前提条件是建立索引,行级锁并不是直接锁记录,而是锁索引后再锁主键

分析:
a先根据code锁住了index然后锁住了primary key,然后根据user_id取锁定对应的index
b同时根据user_id锁住了index然后取锁定primary key,再去锁code的index和primary key
当a根据code锁定住primary key的时候,b锁定了user_id的index
这时候a没办法锁定user_id,b没办法锁定primary key->导致死锁
(当然同一条操作应该是拥有重入锁的功能)
refer:
https://bugs.mysql.com/bug.php?id=77209

相关文章

网友评论

      本文标题:MySQL Innodb死锁

      本文链接:https://www.haomeiwen.com/subject/puugmftx.html