欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

InnoDB的独占锁定机制

最编程 2024-08-05 10:02:50
...

1、排他锁不能被其他事务加锁查询

测试:打开两个测试窗口(这里用的是Navicat工具),窗口1和窗口2开启事务,普通查询是可以的,但是排他锁和共享锁不兼容,排他锁和排他锁也不兼容

-- 第1步、窗口1开启事物
START TRANSACTION;

-- 第2步、窗口2开启事物
START TRANSACTION;

-- 第3步、窗口1查询数据并添加排他锁
SELECT * FROM city FOR UPDATE;

-- 第4步、窗口2普通查询语句没有问题,可以查询出数据
SELECT * FROM city

-- 第5步、窗口2添加共享锁或者排他锁(二者执行一条语句即可),此时查询处于等待状态,说明排他锁和共享锁,排他锁和排他锁都不能共存,只有窗口1提交了事务,才能添加锁
SELECT * FROM city LOCK IN SHARE MODE;

SELECT * FROM city FOR UPDATE;

2、排他锁不能被其他事务修改

-- 第1步、窗口1开启事物
START TRANSACTION;

-- 第2步、窗口1查询数据并添加排他锁
SELECT * FROM city FOR UPDATE;

-- 第3步、窗口2开启事物
START TRANSACTION;

-- 第4步、窗口2修改数据(此时修改失败,修改处于等待状态,当窗口1提交事务了,修改才会成功)
UPDATE city SET name = '北京' WHERE id = 1

-- 第5步、窗口1提交事物
COMMIT;

-- 第6步、窗口2提交事物
COMMIT;

原文地址:https://www.cnblogs.com/weiduaini/p/17271869.html