更新具有特定条件的行时是否需要事务

Do I need a transaction when updating a row with a specific condition

我正在做一个小项目,我想将 table 中的一些项目标记为“已声明”。

所以大多数项目都会有一个 claim_id = NULL,当我想领取一个项目时,我会调用这个命令来更新下一个可用的项目:

update ci_items
set claim_id = ?
where claim_id IS NULL 
order by id 
LIMIT 1;

我认为这应该总是更新下一个可用的项目,或者如果所有项目都已被认领则什么都不更新。 在 2 个数据库连接可以同时 运行 的 Web 应用程序的上下文中,是否存在一个项目同时被声明两次的风险,一个 claim_id 覆盖前一个?

我想我可以使用事务,但 table 结构目前是 MyISAM,我认为它不支持事务

您向我们展示的效果很好。单个 SQL 更新查询在其持续时间内有一个隐式事务(也称为“自动提交”)。

加油吧。

并且在设计和构建应用程序时不要停止问自己这种原子性、一致性、隔离性、持久性 (ACID) 问题。