假设我有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
的外键。
答案 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