插入后MySql触发器更新选择总和

标签 mysql select triggers sum

我有三个表。

  1. 成员
  2. 帐户
  3. 交易

在将新交易插入交易表后,我想用所有交易的总和更新 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:由于您无法使用触发器,请尝试将 INSERTUPDATE 包装到这样的存储过程中

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/

相关文章:

php - 转义字符,例如 $ 和 % | MySQL 和 PHP

javascript - 使用javascript在html中基于下拉选择显示和隐藏div元素

sql - TSQL - 禁用事务中的触发器

ios - 让所有 UI 元素触发其初始值的聪明方法?

mysql - Azure 站点的 aws mysql 连接问题

php - 通过对数据库使用 data-attr 访问特定行

Mozilla Firefox 中的 CSS 样式问题

javascript - 如何将动态生成的表单中 <select> 的选定选项放入输入字段

postgresql - 触发器 : execute query that fired it if condition is verifyed

c++ - CPP - 未处理的异常 std::bad_alloc