更新具有特定条件的行时是否需要事务
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) 问题。
我正在做一个小项目,我想将 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) 问题。