0

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

我的选择查询非常简单:

SELECT * FROM vdp_stream WHERE user=xxx

我的问题实际上是我无法查询 DELETE sql,因为在 iSELECTDELETE. 我对吗?有没有从表中获取行的解决方案?

更新我的表结构:

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

1 回答 1

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;
于 2012-04-14T14:40:06.640 回答