同时进行SELECT和UPDATE操作 - 锁定以防止并发问题

7

我在一个高并发的环境中工作。我的目标是根据某个属性从mysql数据库中选择一行,然后在获得该行后,设置该行中的“锁定”标志,以便我可以在php中进行一些工作(可能需要一些时间),完成后再解锁。为了避免在使用单独的SELECT和UPDATE命令时出现并发问题,最好的方法是什么?

1个回答

2

谢谢!那我只需要调用:'code'$result = mysql_query("SELECT * FROM $database WHERE locked = 0 .. FOR UPDATE"); '/code'然后使用mysql_fetch_assoc获取行,从行中获取ID,再调用UPDATE命令。或者这可以在同一个查询中完成吗? - peter986532
实际更新需要单独查询。表必须是InnoDB类型,来自上述man链接的注意事项:仅当禁用autocommit(通过使用START TRANSACTION开始事务或将autocommit设置为0)时,使用SELECT FOR UPDATE锁定行以进行更新才适用。如果启用了autocommit,则不会锁定符合规范的行。 - plague
自MySQL 5.1以来,如果您使用BEGIN关键字启动事务,则FOR UPDATE在选择时现在是隐式的。但无论如何,使用它是一件好事。当然,在同一个MySQL会话上使用UPDATE,因此在同一个php / http查询上使用。 - regilero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接