0

我的要求是,用户可以点击并使用该交易。一项交易只能由一个成员使用,因此当用户尝试使用交易时,我会锁定表并解锁它。因此,如果两个用户点击并尝试使用该交易,它将形成一个队列,它将阻止两个用户使用该交易。

代码就像

LOCK TABLES deal WRITE;
//MySQL queries and my php code goes here.
UNLOCK TABLES;

现在的问题是,如果我的 php 代码在 lock 和 unlock 之间发生了一些问题,表会被永久锁定吗?无论如何我可以设置锁定表的最长时间吗?

4

2 回答 2

0

如果客户端会话的连接终止,无论是正常还是异常,服务器都会隐式释放会话持有的所有表锁。

资源

于 2012-06-12T09:48:05.427 回答
0

如果我在你的位置,我会创建一个名为locked_deals 的数据库表。它将有一个名为 deal_id 的列。当用户选择一个交易时,它的 deal_id 将被插入到locked_deals 表中。当下一个用户点击同一个交易时,它会首先检查 deal_id 是否在锁定表中。如果是,则不允许用户选择交易。最后,当一切正常时,我们可以在进程结束时从锁表中删除 lock_id。对于由于 php 代码中的任何异常而卡在表中的 lock_ids - 我们可以创建一个后台服务,每 n 分钟清理一次 lock_deals 表中卡住的 ids(在最后 n 分钟内一直被卡住)。希望能帮助到你。

于 2012-06-12T08:49:01.333 回答