goo*_*ing 4 php mysql concurrency
好吧,假设我们有bank_account桌子.有一行叫money.它有2000个价值.我们有两个人试图撤回这笔钱,我们假设他们可以这样做.那么,他们有可能同时这样做吗?例如.有一个组成的代码:
$all_money = get_value('money', 'bank_account); //lets suppose thats a function how we get value money from bank_account table
if($all_money > 0)
{
//here is a code where those money are being withdrawed from bank_account and inserting into the person's account
}
Run Code Online (Sandbox Code Playgroud)
如果这两个人同时获得2,000,那么这意味着该条款if($all_money > 0)将被执行,并且两个玩家将获得2,000并且bank_account将具有-2,000的金钱价值.那么,有可能发生吗?如果是,那我该如何保护呢?谢谢.
在访问表之前执行此操作:
LOCK TABLE table_name READ;
Run Code Online (Sandbox Code Playgroud)
这将锁定表.完成工作后,您可以致电:
UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)