对于MyISAM
、MEMORY
、MERGE
这些存储引擎来说,它们支持表级锁,而且这些存储引擎并不支持事务,所以当我们为使用这些存储引擎的表加锁时,一般都是针对当前会话来说的。
InnoDB存储引擎中的锁
InnoDB
存储引擎既支持表级锁、也支持行级锁,占用资源较少。有时仅仅需要锁住几条记录,如果使用表级锁,效果上相当于为表中的所有记录都加锁,所以性能比较差。行级锁粒度细,可以实现更精细的并发控制,但是占用资源较多。
1. InnoDB中的表级锁
IS
、IX
锁是表级锁,它们的提出不仅仅为了在之后加表级锁的S锁和X锁时,可以加速判断表中的记录是否上锁,以避免用遍历的方式来查看表中有没有上锁的记录。
2. InnoDB中的行级锁
Record Lock
:被称为正经记录锁,支队记录本身加锁。Gap Lock
:锁住记录前的间隙,防止别的事务向改间隙插入记录。Next-Key Lock
:Record Lock
和Gap Lock
的结合体,既保护记录本身,页防止别的事务向该间隙插入新记录。Insert Intention Lock
:某个事务获取一条记录的该类型的锁后,不会阻止别的事务继续获取该记录上任何类型的锁。- 隐士锁:依靠记录的
trx_id
属性来保护不被别的事务改动该记录。