我需要对行进行两次更新,但我需要确保它们一起完成,并且其他用户的其他查询不会干扰它们。我知道,SELECT...FOR UPDATE
但我想在第一次更新后它当然会被解锁,这意味着有人可能会干扰第二次更新。如果其他人先更新该行,则更新将起作用,但会弄乱数据。有没有办法确保这两个更新按照他们应该的方式发生?我被告知有关事务,但据我所知,它们仅有助于确保两个更新实际发生,而不是它们是否“一起”发生,除非我弄错了并且行将被锁定直到事务提交?
以下是查询:
SELECT z FROM table WHERE id='$id'
UPDATE table SET x=x+2 WHERE x>z
UPDATE table SET y=y+2 WHERE y>z
我犯了一个错误,没有提供完整的信息。那是我的错。我已经更新了查询。我遇到的问题是 z 也可以更新。如果 z 在 SELECT 之后但在其他两个更新之前更新,则数据可能会混乱。进行事务 BEGIN/COMMIT 是否适用?