我有一个流表(内存表)和一个插入此表的脚本(从1行/分钟到100行/秒)。我需要每5秒获取1000行,我的意思是选择前1000行然后删除所选行。
我的选择查询非常简单:
SELECT * FROM vdp_stream WHERE user=xxx
我的问题实际上是我无法查询DELETE sql,因为在我SELECT
和DELETE
之间可能会追加一些新行。我对吗?有没有解决方案从表中获取行?
更新我的表格结构:
vdp_stream
---------------------
user CHAR(30)
x INT
y INT
答案 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;