MySQL Innodb死锁
2018-07-27 本文已影响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