gpt4 book ai didi

mysql - 同时读取并更新MySql表中的10条数据记录(元组)(使用单个查询);

转载 作者:行者123 更新时间:2023-11-29 12:52:05 25 4
gpt4 key购买 nike

我正在尝试从 MySql 表中读取 10 条记录并将字段 IsRead 更新为 1 以避免重复读取。因此,当我再次读取数据时,应该使用 IsRead 读取下 10 条记录,而不是已读取的记录,

select * from tablename where IsRead=0 limit 10;

但我的问题是如何同时读取和更新 10 条记录。

使用单个查询。

编辑

以前我正在读取和更新一条记录,但现在我想避免读取时间(一次读取,一次更新),那么读取和更新 10 条记录的合适方法是什么?不应读取重复记录。

最佳答案

您要查找的不是单个语句,而是事务。

交易是进行多个语句的一种方式ACID符合。请在提供的链接中阅读相关内容。简而言之,它的意思是“全有或全无”。

就代码而言,它看起来就像这样:

START TRANSACTION;
select * from tablename where IsRead=0 ORDER BY created_or_whatever_column limit 10 for update;
update tablename set IsRead = 1 ORDER BY created_or_whatever_column LIMIT 10;
COMMIT;

请注意,我添加了一个 order by 子句。在没有 order by 的情况下使用 limit 是没有意义的。除非您指定,否则数据库中的数据没有顺序。

此外,我还在 select 语句中添加了 for update,因此行被锁定,直到事务结束(使用 commit),这样就不会其他事务同时操作这些行。

在这种情况下,您还应该查看 isolation levels .

关于mysql - 同时读取并更新MySql表中的10条数据记录(元组)(使用单个查询);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24570618/

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