1 结论:跳过被锁定的记录
1. 在加锁之前判断记录是否已经被其它会话锁定
(1) 如果已经锁定,那么跳过该已锁定的记录
(2) 如果没有锁定,那么锁定该未锁定的记录
2. 相较于 for update,更加智能
2 验证:分两个会话
验证如下,基础数据:
select * from stu_info t where t.id in (1, 2);
session1 准备:锁住 id = 1 的所有记录
select * from stu_info t where t.id = 1 for update;
session2 效果:锁住 id in (1, 2) 中未被锁定的记录 (跳过已经锁定的记录)
select * from stu_info t where t.id in (1, 2) for update skip locked;