gpt4 book ai didi

mysql - 防止 2 个用户同时更新同一条记录

转载 作者:搜寻专家 更新时间:2023-10-30 21:52:03 25 4
gpt4 key购买 nike

我有一个表 tbl_orders。它有一个数量字段quantity。在我的应用程序的某些部分,我需要将数量减 1。

我已经知道记录的 id(可从客户端获得),所以我发出一条更新语句:

UPDATE tbl_orders
SET quantity=quantity-1
WHERE id= 6

问题是这个查询可能意外地同时运行多次。例如,2个客服人员可能同时更新同一条记录。这意味着应该只减少一次的数量将减少 2。

我尝试将更新放入事务中,但这只会导致第二个事务延迟到第一个事务提交。提交后,第二次更新运行并再次递减记录。

如果一个正在修改记录,我如何确保其他查询失败?

更新:

要使更新有效,客户端的数量与数据库中的数量相同。例如,如果用户在他的浏览器上看到一个数量 5 并想要减少它,则数据库中的值必须相同。

更新 2

我找到了一个很好的解释here使用 Doctrine 2 进行乐观锁定:

最佳答案

我过去使用/看到的一种方法是使用时间戳列。查询时,请确保您在编辑记录开始时同时拥有 ID 和原始时间戳。然后,当您尝试更新时,通过

发送
update YourTable
set counter = counter -1,
TheTimestampColumn = new timestamp value
where ID = yourID
and TheTimeStampColumn = timeStampEditStartedWith

这样,谁先到达原始起始时间戳,谁就赢了。对于下一个,您必须跟踪更新了多少条记录,如果该计数为零,则您将通知用户另一个人在您查看记录时对记录进行了更改。是否要重新加载最新数据? (或类似的东西)。

关于mysql - 防止 2 个用户同时更新同一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635369/

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