gpt4 book ai didi

mysql - 如何正确避免Mysql Race Conditions

转载 作者:可可西里 更新时间:2023-11-01 07:06:25 30 4
gpt4 key购买 nike

我知道之前有人问过这个问题,但我仍然很困惑,如果可能的话,我想在开始编程之前避免任何问题。

我计划拥有一个在任何给定时间至少有 100 名活跃用户的内部网站。用户将发布一个项目(以 0 作为其值插入到数据库中),该项目将通过 php 站点(数据库查询)显示。然后,用户可以选择按下按钮并将该项目锁定为他们的(将该项目的值指定为他们的 ID)

如何确保 2 个或更多用户不会同时检索到相同的项目。我知道在像 c++ 这样的编程中我只会使用普通的 ol 互斥锁。它们在 mysql 中是否是等价物,它会像这样只锁定一个项目条目?我已经看到了对 LOCK_TABLES 和 GET_LOCK 以及许多其他内容的引用,所以我仍然很困惑什么是最好的。

有可能很多人都争先恐后地按下一个按钮,如果多个人都得到确认,那将是灾难性的。

我知道这是竞争条件的主要示例,但 mysql 对我来说是陌生的领域。

我显然会在更新之前查询项目的值并确保它没有写入,但是确保避免这种竞争条件的最佳方法是什么。

提前致谢。

最佳答案

为此,您需要以某种方式锁定记录。添加一列 LockedBy 默认为 0。

当有人按下按钮时,执行类似这样的查询:

更新表 SET LockedBy= WHERE LockedBy=0 and id=;

更新后验证受影响的行(在 php mysql_affected_rows 中)。如果值为 0,则表示查询未更新任何内容,因为 LockedBy 列不为 0,因此被其他人锁定。

希望对你有帮助

关于mysql - 如何正确避免Mysql Race Conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926075/

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