美文网首页
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