在深入探讨MySQL InnoDB的锁机制之前,让我们通过两个具体案例来测试一下对锁的理解。
案例一:主键冲突与间隙锁
环境:MySQL,InnoDB引擎,默认的重复读(RR)隔离级别。
假设存在数据表 t,结构如下:
t(id PK, name);
表中现有数据:
10, shenjian
20, zhangsan
30, lisi
操作序列:
- 事务A先执行(尚未提交):
insert into t values(11, xxx);
- 事务B后执行:
insert into t values(12, ooo);
问题:事务B的插入操作是否会被阻塞?
案例二:自增主键与锁
环境:MySQL,InnoDB引擎,默认的重复读(RR)隔离级别。
假设存在数据表 t,结构如下(含自增主键):
t(id AUTO_INCREMENT PRIMARY KEY, name);
表中现有数据:
1, shenjian
2, zhangsan
3, lisi
操作序列:
- 事务A先执行(尚未提交):
insert into t(name) values('xxx');
- 事务B后执行:
insert into t(name) values('ooo');
问题:事务B的插入操作是否会被阻塞?
这两个案例本质上都是对 InnoDB锁机制 的考察,特别是间隙锁(Gap Lock)、插入意向锁(Insert Intention Lock)等概念在具体场景下的交互。更多关于数据库锁机制的深入讨论,可以在数据库与中间件板块找到相关资源。理解这些底层机制,对于设计高性能、高并发的数据库应用至关重要。后续我们将系统性地剖析InnoDB的7种核心锁类型。
|