如何在每个查询中使用LIMIT使SQL查询的结果不同?

时间:2011-05-12 16:42:18

标签: java sql postgresql locking

我有以下SQL:

SELECT id, url 
FROM link 
WHERE visited = false  
ORDER BY id 
LIMIT 500; 

- * 500只是一个例子

我正在制作一个网络浏览器,并且有一个包含链接的表格。此SQL返回要访问的链接,但不是全部,只返回限制子句中定义的数量。

我将使用线程,如果第一次执行此查询,它将获得前500个链接,如果第二个线程执行相同的查询,它将获得下一个500个链接。换句话说,首先获得链接1到500,第二个线程获得501到1000,第三个线程获得1001到1500,依此类推。

可能它不需要使用线程,但是使用不同的计算机运行相同的应用程序。我不知道是否需要在表中创建一个字段来设置该行正被另一个线程/应用程序使用,或者我只能使用SQL / DBMS执行此操作。我正在使用PostgreSQL。

换句话说,我需要锁定一个咨询行,以便不会出现在另一个查询中。

2 个答案:

答案 0 :(得分:0)

您是否尝试过更新/返回?

update link
set visiting = true
from (
    select id
    from link
    where visiting = false
    and visited = false
    limit 500
    for update
    ) as batch
where batch.id = link.id
returning *;

答案 1 :(得分:0)

跳过1500行并接下来的500

SELECT id, url 
FROM link 
WHERE visited = false  
ORDER BY id 
LIMIT 500 OFFSET 1500

http://www.postgresql.org/docs/8.3/interactive/queries-limit.html