我有一个用于存储任务的表,该任务需要执行到“任务队列”表中,因为我正在使用多线程从该表中获取前1名,然后执行该任务。我从任务队列中获得前1条记录,然后删除该记录。因此,例如,如果另一个线程在上一个线程删除它选择的任务之前执行,则两个线程可能会显示相同的线程。我想知道是否有一种方法可以停止从数据库中进行其他读取,直到我当前的线程删除它选择的线程为止?
最佳答案
而不是先执行SELECT
后再执行DELETE
,而可以使用 DELETE
子句执行OUTPUT
。 OUTPUT
子句产生一个结果集,但是现在您可以直接从DELETE
获得该结果集,因此它是单个原子操作-两个独立的执行将不会产生相同的输出行。
关于sql - 访问第一行并立即将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508983/