选择和删除

时间:2010-12-03 22:11:36

标签: java mysql

我想选择表格中的第一行,按time(升序)排序,然后删除该行。我不想使用两个查询,因为有可能另一个客户端在删除之前可以选择该行(将有多台计算机同时从不同的网络连接)。

我以为我可以做点什么

SELECT * FROM `mytable` ORDER BY `time` LIMIT 1;
    DELETE FROM `mytable` ORDER BY `time` LIMIT 1

...但我收到了一个错误:

  

您的SQL语法有错误;   检查对应的手册   您的MySQL服务器版本   在'附近使用正确的语法';删除*   来自pending ORDER BY time LIMIT   第1行1'

最好的方法是什么?感谢。

3 个答案:

答案 0 :(得分:4)

重新显示您的错误消息(与您的问题不同):

DELETE * FROM pending ORDER BY time LIMIT 1

在语法中看起来像是一个错误。尝试删除*。也就是说,

DELETE FROM pending ORDER BY time LIMIT 1

应该可以正常工作。

答案 1 :(得分:2)

您必须创建一个临时表,MySQL不允许您从正在使用的表中删除,请参阅以下代码:

insert  tmpTable
        (id)
select  id
from    YourTable yt
order by time limit 1;

delete  
from    YourTable
where   ID in (select id from tmpTable);

答案 2 :(得分:1)

您可以使用像。

这样的子查询
delete from table where id in ( select id from table order by time limit 1);

性能方面我不确定,这个解决方案有多好。您可能需要进行分析,看看它是如何为您工作的。