如何从数据库表中获取(选择然后删除)?

时间:2012-04-14 14:29:40

标签: mysql select fetch

我有一个流表(内存表)和一个插入此表的脚本(从1行/分钟到100行/秒)。我需要每5秒获取1000行,我的意思是选择前1000行然后删除所选行。

我的选择查询非常简单:

SELECT * FROM vdp_stream WHERE user=xxx

我的问题实际上是我无法查询DELETE sql,因为在我SELECTDELETE之间可能会追加一些新行。我对吗?有没有解决方案从表中获取行?

更新我的表格结构:

vdp_stream
---------------------
user CHAR(30)
x    INT
y    INT

1 个答案:

答案 0 :(得分:1)

如果您打算继续使用表格,我建议在事务中使用UPDATE,SELECT和DELETE语句。这样的事可能 -

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的默认隔离级别是REPEATABLE READ,您可以省略更新,只需根据相同的标准执行SELECT和DELETE -

START TRANSACTION;

SELECT *
FROM vdp_stream
ORDER BY id ASC
LIMIT 1000;

DELETE
FROM vdp_stream
ORDER BY id ASC
LIMIT 1000;

COMMIT;