我有三个表。
- 成员
- 帐户
- 交易
在将新交易插入交易表后,我想用所有交易的总和更新 Accounts.AccountBalance.TransactionAmount。
下面的代码似乎对我不起作用。有什么建议吗?
CREATE TRIGGER NewTrigger
AFTER INSERT ON Transactions
FOR EACH ROW
BEGIN
UPDATE Accounts SET Accounts.AccountBalance = (
SELECT SUM(Transactions.TransactionAmount)
FROM Transactions
WHERE Accounts.AccountID=Transactions.AccountID
)
最佳答案
尝试
CREATE TRIGGER NewTrigger
AFTER INSERT ON Transactions
FOR EACH ROW
UPDATE Accounts a
SET a.AccountBalance =
(SELECT SUM(TransactionAmount)
FROM Transactions
WHERE AccountID = a.AccountID)
WHERE a.AccountID = NEW.AccountID;
这是 SQLFiddle 演示。
UPDATE:由于您无法使用触发器,请尝试将 INSERT
和 UPDATE
包装到这样的存储过程中
DELIMITER $$
CREATE PROCEDURE AddTransaction(IN aid INT, amount DECIMAL(11, 2))
BEGIN
START TRANSACTION;
INSERT INTO Transactions (AccountID, TransactionAmount)
VALUES (aid, amount);
UPDATE Accounts a
SET a.AccountBalance =
(SELECT SUM(TransactionAmount)
FROM Transactions
WHERE AccountID = a.AccountID)
WHERE a.AccountID = aid;
COMMIT;
END $$
DELIMITER ;
然后使用它
CALL AddTransaction(1, 10.50);
这是 SQLFiddle 该场景的演示。
关于插入后MySql触发器更新选择总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16802833/