意向锁的问题

2 分钟阅读 338 字 + 186 词
  • 在使用InnoDB引擎的表里对某些记录加上【共享锁】前,需要先在表级别加上一个【意向共享锁】
  • 在使用InnoDB引擎的表里对某些记录加上【独占锁】前,需要先在表级别加上一个【意向独占锁】
普通的select是不会加行级锁 的,普通的select语句是 利用MVCC 实现一致性读,是无锁的。
但是,当执行 插入,更新,删除 操作,需要 加上意向独占锁,然后对该记录加独占锁。
意向共享锁和意向独占锁这种表级锁不会和行级别的共享锁和独占锁发生冲突。
意向锁的目的是为了快速判断表里是否有记录被加锁
插入意向锁
一个事务在插入一条记录的时候,需要判断插入位置是否已被其他事务加了间隙锁(next-key lock也包括间隙锁)
如果有的话,插入操作就会发生 阻塞 。直到拥有间隙锁的那个事务提交为止,在此期间会生成一个 插入意向锁 ,表明有事务想在某个区间插入新记录,但是现在处于等待状态。
插入意向锁不是意向锁,是一种特殊的间隙锁(锁住一个点),属于行级别锁