MySQL死锁
Reference: https://time.geekbang.org/column/article/117247 死锁产生 行锁的具体实现算法有三种:record lock、gap lock以及next-key lock。 record lock是专门对索引项加锁; gap lock是对索引项之间的间隙加锁; next-key lock则是前面两种的组合,对索引项及其之间的间隙加锁。 只在可重复读或以上隔离级别下的特定操作才会取得gap lock或next-key lock,在Select、Update和Delete时,除了基于唯一索引的查询之外,其它索引查询时都会获取gap lock或next-key lock,即锁住其扫描的范围。主键索引也属于唯一索引,所以主键索引是不会使用gap lock或next-key lock。 在MySQL中,gap lock默认是开启的,即innodb_locks_unsafe_for_binlog参数值是disable的,且MySQL中默认的是RR事务隔离级别。 当执行以下查询SQL时,由于order_no列为非唯一索引,此时又是RR事务隔离级别,所以SELECT的加锁类型为gap lock,这里的gap范围是(4,+∞)。 1 SELECT id FROM demo.order_record where order_no = 4 for