SQL查询如何跳过持有锁的行使其不被选中
跳过查询中被加锁行的实现方法
针对你使用的SQL Server语法场景,要实现跳过已被其他事务加锁的行,直接在第二个会话的查询语句中添加READPAST表提示即可。
示例查询代码:
SELECT * FROM [table] WITH (READPAST) WHERE id = 2;
READPAST的作用就是让数据库引擎读取数据时,直接跳过所有已经被其他事务持有锁的行,既不会等待锁释放,也不会触发锁超时错误,你要的id=2的加锁行就不会出现在本次查询结果中。
注意事项
- 不同数据库有对应的同类实现:MySQL InnoDB引擎、PostgreSQL可以使用
SKIP LOCKED关键字实现相同效果。 READPAST仅对行级锁生效,如果被加的是表级锁,该提示不会生效。- 该特性常被用于队列类业务场景,避免多个消费者争抢同一条数据时出现锁等待或死锁问题。
内容的提问来源于stack exchange,提问作者Rudra
相关产品推荐
相关产品推荐

