【发布时间】:2021-08-11 09:33:15
【问题描述】:
我必须从一个用户帐户中减少资金并增加另一个用户帐户,即将资金从一个帐户转移到另一个帐户。 例如,我在 MySql 中有此代码:
START TRANSACTION;
UPDATE accounts
SET balance = (balance-100)
WHERE account_id = 2 AND balance>100;
--If the above query is succesfully then:
UPDATE accounts
SET balance = (balance+100)
WHERE account_id =1;
--How can I exec the commit only if everything is ok?
COMMIT;
只有当余额>100时才会执行第一个查询。
但是,只有在前一个查询减少了余额时,才应该执行第二个查询(即第二次更新)。我怎样才能自动检查这个?
此外,COMMIT;仅当前 2 个查询已完成其工作时才必须执行。
如何实现?
(我也在使用 PHP,但我认为使用 sql 可以轻松解决这个问题。我错了吗?)
【问题讨论】:
-
根据CONTINUE HANDLER定义,在其代码中设置一些标志变量,在语句执行后分析其值是否先前语句产生了一些错误/警告。不要忘记从第一个查询中删除 WHERE,而是将
CHECK (balance >= 0)约束添加到允许检测问题的表定义中。 -
只有当余额>100时才会执行第一个查询。这是错误的!!!无论如何都会执行查询。它仅在满足条件时才更改数据 - 这是真的。
-
@Akina 当然,我的意思是仅当余额>100 时才会执行更改
标签: php mysql sql transactions