InnoDB 中的意向锁是为了更容易检测表锁和行级锁之间的冲突,但实际上 MDL (元数据锁)已经完成了这件事情。
例如事务 t1 更新表的某一行,会持有该表的元数据锁 SHARED_WRITE ,当事务 t2 去 lock tables ... 锁表时,需要先获取该表的元数据锁 SHARED_NO_READ_WRITE/SHARED_READ_ONLY , 但这两个元数据锁已经与 SHARED_WRITE 锁互斥了,t2 也会阻塞在 Waiting for table metadata lock 阶段。
所以意向锁的作用体现在哪?