当前位置: 首页 > 图灵资讯 > java面试题> 金三银四精选java面试题-什么是意向锁?

金三银四精选java面试题-什么是意向锁?

来源:图灵教育
时间:2023-12-05 10:25:39
 

什么是意向锁?

MySQL 中获取一个公共资源时会先对该资源进行加锁操作,如果多个事务都是直接获取资源锁,就很可能出现互相阻塞问题,甚至是出现死锁问题

比如说事务 A 针对 Test 表中的某行记录进行了加锁,此时该条记录只能读取不能修改

如果同时事务 B 需要对 Test 表添加表级锁,那么就需要遍历 Test 表中的所有数据是否存在事务已经针对该表记录添加了行级锁,逐行遍历就比较浪费资源,因此 MySQL 就针对该问题引入了意向锁机制。

当一个事物获取行级锁或表级锁时,MySQL 会自动获取相应表的意向锁,我们可以简单理解在表上有一个标志位,标志着是否已经有行级锁或者是表级锁了。

这样其他事务也想针对该表进行操作时,只需要先判断意向锁即可,就无需逐行遍历。

同时意向锁也分意向共享锁意向排他锁

  • 意向共享锁(IS):在一个事务需要对表中某些行加共享锁(S锁)时,事务首先需要获得表的意向共享锁(IS锁)。
  • 意向排他锁(IX):指的是在一个事务需要对表中某些行加排它锁(X锁)时,事务首先需要获得表的意向排它锁(IX锁)。

需要注意意向锁是一种辅助性的锁,用于协调表级锁和行级锁之间的关系,它并不直接加在数据记录上,而是加在表级别或页面级别上,用于指示事务接下来可能会对数据行进行何种类型的锁定操作。