回答
意向锁是 InnoDB 表级锁,它是 InnoDB 支持多粒度锁定,解决表锁和行锁共存问题的方案。特点如下:
- 意向锁指事务稍后会对表中的行加 X 锁(排它锁)或 S 锁(共享锁),也就说意向锁分为 IX(意向排它锁)和 IS(意向共享锁)。
- InnoDB 引擎对表里某些记录加 S 锁前,必需先获得表上的 IS 锁或更强的锁。
- InnoDB 引擎对表里某些记录加 X 锁前,必需先获得表上的 IX 锁。
- 意向锁由 InnoDB 自动管理,以确保数据库的一致性和减少锁冲突,提高并发性能。
意向共享锁和意向排它锁是表级锁,不会和行级的共享锁和排它锁发生冲突。而且意向锁之间也不会发生冲突,只会和排它表锁(LOCK TABLES ... WRITE)发生冲突。
扩展
一、为什么需要意向锁?
1、如果没有意向锁,在加排它性表锁时,需遍历表里所有记录以查看是否有记录存在排它锁,如此效率极低。
2、引入意向锁后,在对行记录加独占锁前,会先加上表级别的意向排它锁。
3、如此,加排它性表锁时直接判断表级别的意向排它锁而不用去遍历表中记录。