diff --git a/mysql/mysql文档/锁.md b/mysql/mysql文档/锁.md index e049f2f..33d398b 100644 --- a/mysql/mysql文档/锁.md +++ b/mysql/mysql文档/锁.md @@ -65,4 +65,19 @@ table level锁的兼容性如下所示: TABLE LOCK table `test`.`t` trx id 10080 lock mode IX ``` +### Record Lock +记录锁是针对一条index record的锁。例如,`SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE`语句会阻塞任何其他事务针对`c1 = 10`记录的插入、更新或删除。 + +records总是会针对index record加锁,即使当前table没有定义索引。对于table未定义索引的情况,innodb会创建一个隐藏的聚簇索引,并使用该聚簇索引来进行record lock。 + +事务相关record lock的信息,可以通过`SHOW ENGINE INNODB STATUS`来展示,其输出格式如下: +``` +RECORD LOCKS space id 58 page no 3 n bits 72 index `PRIMARY` of table `test`.`t` +trx id 10078 lock_mode X locks rec but not gap +Record lock, heap no 2 PHYSICAL RECORD: n_fields 3; compact format; info bits 0 + 0: len 4; hex 8000000a; asc ;; + 1: len 6; hex 00000000274f; asc 'O;; + 2: len 7; hex b60000019d0110; asc ;; + ``` +