我想选择表格中的第一行,按time
(升序)排序,然后删除该行。我不想使用两个查询,因为有可能另一个客户端在删除之前可以选择该行(将有多台计算机同时从不同的网络连接)。
我以为我可以做点什么
SELECT * FROM `mytable` ORDER BY `time` LIMIT 1;
DELETE FROM `mytable` ORDER BY `time` LIMIT 1
...但我收到了一个错误:
您的SQL语法有错误; 检查对应的手册 您的MySQL服务器版本 在'附近使用正确的语法';删除* 来自
pending
ORDER BYtime
LIMIT 第1行1'
最好的方法是什么?感谢。
答案 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);
性能方面我不确定,这个解决方案有多好。您可能需要进行分析,看看它是如何为您工作的。