在INSERT中减去/添加MySQL列的值

时间:2015-04-15 12:52:06

标签: mysql sql

假设我有transfersbank_accounts表。我希望运行以下查询:

INSERT INTO transfers SET amount = 1234, sender_account = 323, receiver_account = 324;

我想修改我的查询,它会增加receiver_account余额的转移金额并减少sender_account的余额。这在MySQL中是否可行?

修改
 sender_accountreceiver_account列是bank_accounts的外键。

2 个答案:

答案 0 :(得分:0)

如果没有触发器,则不能仅使用查询来插入和更新不同的表。

答案 1 :(得分:0)

有两种方法可以做到这一点。第二个是我最喜欢的,不容易出错。

1)如果它在相同的函数/类(PHP,java等)中运行,那么amount,sender_account,receiver_account的值都可以作为变量使用,那么你可以使用标准构建MySQL更新声明:

UPDATE bank_accounts SET balance = balance + amount WHERE account_id = receiverAccount
UPDATE bank_accounts SET balance = balance - amount WHERE account_id = senderAccount

account_id是bank_accounts表的主键,receiverAccount / senderAccount是包含值的变量。

2)如果您在同一个函数中无法使用这些值,那么您可以使用触发器。

CREATE TRIGGER UpdateAccounts
AFTER INSERT ON transfers
BEGIN
UPDATE bank_accounts SET balance = balance + NEW.amount WHERE account_id = NEW.receiver_account
UPDATE bank_accounts SET balance = balance - NEW.amount WHERE account_id = NEW.senderAccount
END;

当有多个更新发生在不同的表上并且您不想错过任何更新时,触发器很有用。非常方便银行等项目。 您可以在此处阅读有关触发器及其使用方式的更多信息: https://dev.mysql.com/doc/refman/5.0/en/create-trigger.html