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