MySQL-防止重复预定

Mar*_*ark 1 mysql database transactions insert

我正在尝试找出最好的方法来停止我的应用程序中的双重“预订”。

我有一个唯一ID的表,每个表只能出售一次。

我当前的想法是使用事务检查所选产品是否可用,然后将其插入到“状态”列中以表示已被“保留”,同时插入“更新时间”,然后用户继续操作。支付我将状态更新为“出售”。

每隔10分钟,我都会进行一次cron作业检查,以检查“状态” =“保留”,该检查已在10多分钟前进行了更新,并删除了这些行。

有没有更好的办法?我从未使用过交易(我刚刚听到过类似的词),所以如果有人可以解释我将如何做到这一点,那将是王牌。

lon*_*eck 5

尽管这里有其他建议,但交易并不是完整的解决方案。

听起来您在这里有一个Web应用程序,选择和购买预订需要几个页面(步骤)。这意味着您将不得不跨两个页面来打开一个事务,这是不可能的。

您的方法(状态列)是正确的,但是,我将以不同的方式实施。代替状态列,添加两列:reserved_byreserved_ts

  • 预订产品时,设置reserved_by为用户或会话的主键,并设置reserved_tsnow()
  • 当查找非预留产品时,请查找reserved_ts无效或过期超过10分钟的产品。(实际上,我会比您告诉用户的情况要早几分钟,以避免可能出现的比赛情况。)
  • 清除旧保留的计划工作变得不必要。