我有一个表存储任务的表,需要执行任务队列表,因为我使用多线程从该表中获取前1,然后执行该任务。我从任务队列获得前1记录,然后我删除该记录。因此,例如,如果另一个线程在前一个线程删除它选择的任务之前执行,则两个线程可以拍摄相同的线程。我想知道是否有一种方法可以阻止其他数据从数据库读取,直到我当前的线程删除它选择的线程?
答案 0 :(得分:4)
您可以改为执行带有OUTPUT
子句的SELECT
,而不是DELETE
后跟DELETE
。 OUTPUT
子句生成结果集,但您现在直接从DELETE
获取结果集,因此它是单个原子操作 - 两个独立的执行不会产生相同的输出行。