mysql间隙锁演示示例

MySQL的间隙锁(Gap Lock)是一种在多个事务并发操作时,保护数据表中相邻数据行之间的间隙(Gap)不被其他事务同时读取或修改的锁机制。下面是一个简单的MySQL间隙锁演示:

  1. 创建一个测试表:
CREATE TABLE test_table (  
  id INT PRIMARY KEY,  
  value INT  
);
  1. 向测试表中插入一些数据:
INSERT INTO test_table (id, value) VALUES (1, 10), (2, 20), (3, 30);
  1. 开启两个MySQL事务:
-- 第一个事务  
BEGIN;  
SELECT * FROM test_table WHERE id BETWEEN 1 AND 3;  
-- 第二个事务  
BEGIN;  
SELECT * FROM test_table WHERE id BETWEEN 2 AND 4;
  1. 在第一个事务中修改数据:
UPDATE test_table SET value = 15 WHERE id = 1;
  1. 在第二个事务中尝试修改数据:
-- 报错,出现死锁  
UPDATE test_table SET value = 25 WHERE id = 2;

在这个演示中,我们创建了一个测试表,插入了三条数据。然后我们开启了两个MySQL事务,分别查询了不同的数据范围。在第一个事务中,我们修改了id为1的数据行的value值。在第二个事务中,我们尝试修改id为2的数据行的value值,但会发现无法执行这个操作,因为第一个事务已经获取了间隙锁,阻止了其他事务对相邻数据行的并发操作。