当前读产生间隙锁的条件,案例
时间: 2023-11-15 16:33:23 浏览: 124
在 MySQL 中,当一个事务在读取某个数据行时,如果另一个事务在该数据行上持有了排它锁或者共享锁,那么当前事务就会被阻塞,直到另一个事务释放了该锁。这种情况下就会产生间隙锁。
举个例子,假设有两个事务 T1 和 T2,它们都要对表中的数据行进行操作。T1 先执行以下语句:
```
SELECT * FROM table WHERE id = 1 FOR UPDATE;
```
此时,T1 在数据行 id = 1 上持有了排它锁。接着,T2 执行以下语句:
```
SELECT * FROM table WHERE id BETWEEN 1 AND 10 FOR UPDATE;
```
此时,T2 需要在 id 为 2~10 的数据行上持有间隙锁,以防止其他事务在这个范围内插入新的数据行。但是由于 T1 在数据行 id = 1 上持有了排它锁,T2 会被阻塞,直到 T1 释放了该锁。
这就是一个产生间隙锁的案例。
阅读全文