我的要求是,用户可以点击并利用这笔交易。 只有一个成员可以使用一笔交易,因此当用户尝试利用交易并解锁时,我会锁定该表。因此,如果两个用户点击并尝试利用该交易,它将形成一个队列,这将阻止两个用户利用该交易。
代码就像
LOCK TABLES deal WRITE;
//MySQL queries and my php code goes here.
UNLOCK TABLES;
现在的问题是,如果我的php代码在锁定和解锁之间出现问题,该怎么办? 桌子会永久锁定吗?无论如何我可以设置锁定桌子的最长时间吗?
答案 0 :(得分:0)
如果我本来就在你的位置,我会创建一个名为locked_deals的数据库表。它将有一个名为deal_id的列。当用户选择交易时,其deal_id将被插入到locked_deals表中。当下一个用户点击同一笔交易时,它将首先检查deal_id是否在锁定表中。如果是,则不允许用户选择交易。最后,当一切正常时,我们可以在进程结束时从锁定表中删除lock_id。对于由于php代码中的任何异常而陷入表中的lock_ids - 我们可以创建一个后台服务,每n分钟在locked_deals表中清除被卡住的id(最近n分钟被卡住了)。 希望它有所帮助。
答案 1 :(得分:0)
如果客户端会话的连接终止,无论是正常还是异常,服务器都会隐式释放会话持有的所有表锁。