-- 事务ABEGIN;SELECT*FROM products WHERE id =1;-- 读取版本100-- 事务BBEGIN;UPDATE products SET price =200WHERE id =1;COMMIT;-- 生成版本101-- 事务A再次查询仍读取版本100COMMIT;
5. 锁机制
5.1 表锁与行锁对比
锁类型
语法示例
行为
表锁
LOCK TABLE test IN ACCESS EXCLUSIVE MODE;
锁定整张表(阻塞所有读写操作)。
行锁
SELECT * FROM test WHERE id = 1 FOR UPDATE;
锁定单行(其他事务无法修改该行,但可读取)。
5.2 行锁使用场景
-- 事务A获取行锁BEGIN;SELECT*FROM orders WHERE id =100FORUPDATE;-- 事务B尝试修改被阻塞BEGIN;UPDATE orders SETstatus='shipped'WHERE id =100;-- 等待事务A提交