https://segmentfault.com/a/1190000018730103
1 | show engine innodb status; |
记录锁,间隙锁,Next-key 锁和插入意向锁。这四种锁对应的死锁如下:
记录锁(LOCK_REC_NOT_GAP): lock_mode X locks rec but not gap
间隙锁(LOCK_GAP): lock_mode X locks gap before rec
Next-key 锁(LOCK_ORNIDARY): lock_mode X
插入意向锁(LOCK_INSERT_INTENTION): lock_mode X locks gap before rec insert intention
关于显式锁和隐式锁
死锁日志
1 | ===================================== |
一些注释:
LATEST DETECTED DEADLOCK:标示为最新发生的死锁;
(1) TRANSACTION:此处表示事务1开始 ;
MySQL thread id 16, OS thread handle 140548578129664, query id 3052 183.6.50.229 root update:此处为记录当前数据库线程id;
insert into t_bitfly values(7,7):表示事务1在执行的sql ,不过比较悲伤的事情是show engine innodb status 是查看不到完整的事务的sql 的,通常显示当前正在等待锁的sql;
(1) WAITING FOR THIS LOCK TO BE GRANTED:此处表示当前事务1等待获取行锁;
(2) TRANSACTION:此处表示事务2开始 ;
insert into t_bitfly values(5,5):表示事务2在执行的sql
(2) HOLDS THE LOCK(S):此处表示当前事务2持有的行锁;
(2) WAITING FOR THIS LOCK TO BE GRANTED:此处表示当前事务2等待获取行锁;