如何从数据库表中获取(选择然后删除)?
我有一个流表(内存表),并在这个表中插入一个脚本(从1行/分钟到100行/秒)。我需要每5秒取1000行,我的意思是选择前1000行,然后删除选定的行。如何从数据库表中获取(选择然后删除)?
我选择的查询是如此简单:
SELECT * FROM vdp_stream WHERE user=xxx
我的问题是实际上我不能查询SQL DELETE,因为也许一些新的行中的时间之间追加,我SELECT
和DELETE
。我对吗?有没有解决方案从表中获取行?
更新我的表结构:
vdp_stream
---------------------
user CHAR(30)
x INT
y INT
如果要继续使用表我会建议使用UPDATE这样做,选择并删除事务中的语句。像这样的事情也许 -
START TRANSACTION;
UPDATE vdp_stream
SET selected = 1
ORDER BY id ASC
LIMIT 1000;
SELECT *
FROM vdp_stream
WHERE selected = 1;
DELETE
FROM vdp_stream
WHERE selected = 1;
COMMIT;
UPDATE - 为InnoDB的默认隔离级别是可重复读,你可以省略更新,只是做了选择和删除基于同样的标准 -
START TRANSACTION;
SELECT *
FROM vdp_stream
ORDER BY id ASC
LIMIT 1000;
DELETE
FROM vdp_stream
ORDER BY id ASC
LIMIT 1000;
COMMIT;
我真的需要'选择'吗?如果表在交易过程中被锁定,为什么我需要该列? – 2012-04-14 14:44:44
我用另一个选项更新了我的答案 – nnichols 2012-04-14 14:47:22
什么是表结构?听起来你应该使用消息传递系统,而不是RDBMS来完成这项任务。 – nnichols 2012-04-14 14:33:27
是的,我知道RDBMS听起来很糟糕,但我需要知道RDBMS数据库中类似情况的任何解决方案。 – 2012-04-14 14:36:40