07_插入意向锁

插入意向锁(Insert Intention Lock)

简介

插入意向锁是 InnoDB 存储引擎在处理行级锁定时使用的一种特殊类型的锁(特殊的间隙锁),主要用于管理间隙锁(Gap Lock)和行锁(Record Lock)之间的兼容性。它是一种优化机制,使得多个事务能够同时插入同一个间隙(Gap)中的不同位置,而不会彼此阻塞。


工作原理
  • 间隙锁:间隙锁是一种锁定记录之间的间隙,而不是锁定实际的记录。它用于防止其他事务在间隙中插入新记录,从而保证可重复读(Repeatable Read)隔离级别下的一致性。
  • 意向锁:意向锁是一种表明事务打算在某个资源上加锁的锁。在 InnoDB 中,存在两种类型的意向锁:插入意向锁和意向共享/排他锁(分别对应于共享和排他锁的意向版本)。

插入意向锁是一种特殊的间隙锁,它表示一个事务打算在某个特定的间隙中插入一条或多条记录。当多个事务都想在同一个间隙中插入记录时,它们之间不会因为间隙锁而互相阻塞,因为插入意向锁之间是兼容的。这样,只要这些事务插入的记录不冲突(即不尝试插入相同位置的记录),它们就可以并发进行。


特点
  • 互相兼容:不同事务的插入意向锁之间是兼容的,允许多个事务并发地向同一个间隙插入数据。
  • 与其他类型锁的关系:当一个事务尝试在某个间隙中插入数据时,如果该间隙已经被另一个事务以排他锁(如记录锁或其他间隙锁)锁定,则该事务必须等待排他锁释放。插入意向锁主要是为了与间隙锁和记录锁协同工作,而不是替代它们。
  • 优化并发插入:插入意向锁的主要目的是优化并发插入操作,减少因为间隙锁而导致的不必要的阻塞和等待。

加锁流程

插入意向锁(Insert Intention Lock)是 MySQL InnoDB 存储引擎中的一种锁机制,用于在插入新记录时表示对某个间隙的插入意图,以避免多个事务在插入操作时相互阻塞。下面是插入意向锁的加锁流程,结合具体步骤进行详细说明。

假设有一个表 example,包含以下数据:

CREATE TABLE example (
    id INT PRIMARY KEY,
    value VARCHAR(50)
);
INSERT INTO example (id, value) VALUES (4, 'A'), (7, 'B'), (10, 'C');
加锁流程示例

假设我们有两个事务分别试图在 id56 的位置插入记录。

事务A:插入 id = 5
  1. 事务A 开始

    START TRANSACTION;
    INSERT INTO example (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值