mysql的意向锁

innodb支持多粒度锁,允许行级锁和表级锁共存,意向锁是一种表锁,并且不与行级锁冲突。

意向锁分为两种:意向共享锁(IS)和意向排斥锁(IX)。

IS表示事务向表中的某些行加共享锁,IX表示事务向表中的某些行加了排他锁。意向锁是db引擎自己维护的,用户无法手动操作意向锁。 在为数据行加共享/排他锁之前,InnoDB会获取该表的意向锁。

意向锁的兼容互斥性: IS、IX之间是兼容的,不会发生互斥,但是IS和IX和普通的排它锁以及共享锁是互斥的,这里普通的排他锁/共享锁是表级的,不是行级的, 意向锁不会与行级的锁互斥。

引入意向锁是为了提高效率,当一个事务要申请表锁的时候,要保证没有表锁,同时每个行没有互斥锁,如果没有意向锁,需要遍历一遍聚簇索引。引入了意向锁, 则只需要判断意向锁即可。

Written on September 14, 2021