我有一种情况,在任何其他事务可以查看给定表之前,特定事务必须更新数据库。具体来说,有一个奖金机制,奖金数量有限,我担心如果两个请求几乎同时到达,第二个请求可能会因第一个请求没有时间而发现奖品仍然可用它需要将其标记为不可用。寻找在mySQL中锁定表的正确方法
我正在查看lock tables的文档,我不清楚发生了什么事情,而且由于测试此功能非常困难(因为它需要同时发送两个请求),所以我希望有一些咨询。
我的需求非常简单。我只需要锁定一张桌子,而其他所有人都可以关注他们的业务。
**request 1**:
lock prizes;
select from prizes;
mark prize as unavailable;
unlock prizes;
simultaneous **request n**
find the prizes table locked and wait for it to unlock //this is not critical, so long as they can just fail gracefully
select [no prize available]
正如我所说,这是非常重要的,在这个数据库中的其它表都是由我的锁完全不受影响,我从文档的感觉,当我锁定一个表,选择其他表会产生一个错误,说:“其他表没有被锁定”......我可能没有正确理解这一点,因为这似乎是愚蠢的,但只需确保锁定奖品不会影响其他任何东西。
TIA
真棒!这正是我想要的。 – 2012-01-18 01:49:08
您还应该考虑可用的不同事务隔离并选择适当的事务:http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html – 2012-01-18 11:58:10