mysql - 在当前值上使用 where 子句的更新语句
问题描述
我正在尝试执行更新语句来更新我的数据库表中的余额。此表仅存储 userId 和 currentBalance。我正在将 mysql 与 InnoDB 一起使用。
我在想像这样的查询 -
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 再次执行整个语句而 where 子句返回 false,因为 WITHDRAW_AMOUNT+balance<0 现在?
解决方案
推荐阅读
- r - geom_histogram() 中的变量 binwith
- uwp - 不能将源代码用于已弃用的控件 SlidableListItem
- python-3.x - 如何通过其在 python networkx 中的属性获得优势?
- php - php 如果条件在 laravel 控制器中不起作用
- python - 如何在python中打印“符号
- javascript - 无法使用 webdrivderio 打开超过 2 个选项卡
- python - Figuring out RegEx search term
- html - HTML 内容溢出页面
- c - FILE *tmp = tmpfile() 总是在 C 中生成 NULL 指针?
- python - 安装 babel 的“plugin-proposal-export-default-from”时遇到问题