假设我有 transfers
和 bank_accounts
表。我希望运行以下查询:
INSERT INTO transfers SET amount = 1234, sender_account = 323, receiver_account = 324;
我想修改我的查询,这样它将增加 receiver_account
余额的转账金额,并减少 sender_account
的余额。这在 MySQL 中可能吗?
编辑
sender_account
和 receiver_account
列是 bank_accounts
的外键。
最佳答案
有两种方法可以做到这一点。第二个是我最喜欢的,并且不太容易出错。
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
关于mysql - 在 INSERT 中减去/添加 MySQL 列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650748/