gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:30:13 24 4
gpt4 key购买 nike

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

我的选择查询非常简单:

SELECT * FROM vdp_stream WHERE user=xxx

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

更新我的表结构:

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

最佳答案

如果您打算继续使用表执行此操作,我建议在事务中使用 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;

更新 - 由于 InnoDB 的默认隔离级别是可重复读取,您可以省略更新,只根据相同的条件执行 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;

关于mysql - 如何从数据库表中获取(选择然后删除)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com