使用当前值的where子句更新语句

时间:2019-06-16 15:33:00

标签: mysql innodb acid

我正在尝试执行更新语句来更新数据库表中的余额。该表仅存储userId和currentBalance。 我在InnoDB中使用mysql。

我当时在想类似-

的查询
update account a set a.BALANCE= a.BALANCE + WITHDRAW_AMOUNT where a.USER_ID = ?2 and a.BALANCE + WITHDRAW_AMOUNT > 0

此查询用于存入或提取资金(在提取的情况下,净余额不得低于0)

如果说我有一个ID为2的用户,那么他的当前余额为500。 共有2个请求要同时提款-

需求1-300

需求2-400

现在我在想,当使用where条件选择要更新的行时,会同时发生吗?据我所知,更新语句的执行确实获得了行上的锁。

如果是,则说Req1为ID为2的用户获取锁,而Req2进入等待这些行。然后我们的余额将更新为200。

现在余额为200,那么因为已选择了行,所以将执行Req 2,还是因为对Req 2再次执行了整个语句,而因为从WITHDRAW_AMOUNT + balance <0开始,where子句返回false,所以会执行? >

0 个答案:

没有答案