如何正确避免Mysql竞争条件

如何正确避免Mysql竞争条件,第1张

概述我知道之前已经问过这个问题,但是如果可能的话,我仍然很困惑并希望避免任何问题.我打算建立一个内部网站,在任何给定时间内至少有100个用户活跃.用户将发布一个项目(插入到db中,其值为0),该项目将通过php站点(db query)显示.然后,用户可以选择按下按钮并将该项目锁定为他们的项目(将该项目的值指定为其ID)如何确保2个或更多用户不会同时检索同一个项目

我知道之前已经问过这个问题,但是如果可能的话,我仍然很困惑并希望避免任何问题.

我打算建立一个内部网站,在任何给定时间内至少有100个用户活跃.用户将发布一个项目(插入到db中,其值为0),该项目将通过PHP站点(db query)显示.然后,用户可以选择按下按钮并将该项目锁定为他们的项目(将该项目的值指定为其ID)

如何确保2个或更多用户不会同时检索同一个项目.我知道在c这样的编程中我只会使用普通的ol互斥锁.他们是mysql中的等价物,它会锁定一个项目条目吗?我已经看过对LOCK_tableS和GET_LOCK以及其他许多人的引用,所以我仍然对最好的东西感到困惑.

许多人都有可能竞相按下那个按钮,如果多人得到确认,那将是灾难性的.

我知道这是竞争条件的一个主要例子,但@R_502_5605@对我来说是外国领土.

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

提前致谢.

最佳答案要实现这一点,您需要以某种方式锁定记录.
添加一列LockedBy默认为0.

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

UPDATE表SET LockedBy = WHERE LockedBy = 0和ID =;

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

希望这可以帮助

总结

以上是内存溢出为你收集整理的如何正确避免Mysql竞争条件全部内容,希望文章能够帮你解决如何正确避免Mysql竞争条件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1168469.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存