MST
星途 面试题库

面试题:MySQL 中间级 - 间隙锁在事务并发场景下的作用

在 MySQL 中,假设存在两个并发事务,事务 A 执行 `SELECT * FROM users WHERE age BETWEEN 20 AND 30 FOR UPDATE;`,随后事务 B 尝试插入一条 `age` 为 25 的记录。请阐述间隙锁在这个场景中是如何发挥作用的,以及对事务 B 的影响是什么?
27.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 间隙锁作用阐述
    • 事务 A 执行 SELECT * FROM users WHERE age BETWEEN 20 AND 30 FOR UPDATE; 语句,此语句会对满足 age 在 20 到 30 之间的记录加上行锁,同时也会对这个范围内的间隙加上间隙锁。
    • 间隙锁的作用是防止其他事务在这个间隙中插入新的记录,从而避免幻读的产生。例如,如果表中 age 为 20 和 30 的记录之间没有其他记录,那么这个 20 到 30 之间的区间就是一个间隙,间隙锁会锁定这个间隙。
  2. 对事务 B 的影响
    • 事务 B 尝试插入一条 age 为 25 的记录,由于事务 A 已经对 age 在 20 到 30 之间的间隙加了间隙锁,事务 B 的插入操作会被阻塞。
    • 直到事务 A 提交或者回滚,释放了间隙锁,事务 B 的插入操作才能够继续执行。这保证了事务 A 在这个范围内查询数据的一致性,避免了幻读现象,即事务 A 再次查询时不会突然出现新插入的满足条件的记录。