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
上一篇: MySQL锁大揭秘:从全局锁到行级锁,彻底理解并掌握!
下一篇: F.29. pgrowlocks