Mysql触发器在另一个表中插入记录后更新可用的余额

时间:2015-06-11 17:53:40

标签: mysql triggers

我在mysql db中有两个表,一个是帐户主表,另一个是帐户事务表。在事务表上插入/更新/删除时,我必须更新帐户主表中的可用余额和最后一个交易日期(帐户主表包含多个帐户)。是否可以使用触发器? 我尝试过以下触发器。但是触发器没有被执行,导致语法错误(MSG 1064 LINE 30 MY SQL DB ERROR)。 如果可以通过触发器处理,请帮助解决。

    DELIMITER $$
   CREATE TRIGGER wlt_bal_upd_insert AFTER INSERT ON wallet_txns
FOR EACH ROW
BEGIN
    UPDATE wallet_accounts
   SET wlt_bal_available =  select sum(IF(wlt_txn_type = 'Expense', -wlt_txn_amount, wlt_txn_amount))from wallet_txns where wlt_name = new.wlt_name,wlt_last_txn_date = select MAX(wlt_txn_date)from wallet_txns where wlt_name = NEW.wlt_name
   WHERE wlt_holder_id = NEW.wlt_holder_id
   and wlt_name = new.wlt_name;
    END $$
DELIMITER ;

1 个答案:

答案 0 :(得分:1)

我只是忘了把括号()。它现在正在工作。这是修改后的代码。

DELIMITER $$
   CREATE TRIGGER wlt_bal_upd_insert AFTER INSERT ON wallet_txns
FOR EACH ROW
BEGIN
    UPDATE wallet_accounts
   SET wlt_bal_available = (select sum(IF(wlt_txn_type = 'Expense', -wlt_txn_amount, wlt_txn_amount))from wallet_txns where wlt_name = new.wlt_name),wlt_last_txn_date = (select MAX(wlt_txn_date)from wallet_txns where wlt_name = NEW.wlt_name)
   WHERE wlt_holder_id = NEW.wlt_holder_id
   and wlt_name = new.wlt_name;
    END $$
DELIMITER ;