多次更新到数据库中的同一行

时间:2012-07-08 20:09:33

标签: php mysql telephony multiple-tables

我正在与一些朋友制作计费系统,它的工作原理如下: 客户打电话。 客户挂断电话。 计算通话价格。 通话费用从客户的信用额中减少。

我们决定做以下事项: 获取用户的余额并将其存储在变量$ balance中,然后执行$ balance = $ balance - $ callprice,最后更新数据库。

问题是客户可以同时进行呼叫,如果两个呼叫同时完成,并且其中一个在另一个脚本更新了新余额之前获得了数据库上的值...其中一个呼叫会迷路。我正在使用php。

知道我该怎么做?

谢谢,对不起,我的英语很差......

1 个答案:

答案 0 :(得分:1)

问题是,您似乎正在尝试使用两个SQL语句来更新用户的余额:一个用于SELECT用户的余额,另一个用于UPDATE用户余额余额为使用PHP减去。

你可以在一次操作中完成所有操作并消除竞争条件的可能性:

UPDATE users
SET balance = balance - <callprice here>
WHERE user_id = <user_id here>