mysql 触发器丢失,如何修复这个MySQL触发器?

I'm trying to get this trigger to work:

CREATE TRIGGER Transaction_insert BEFORE INSERT ON Transaction

FOR EACH ROW WHERE Number = NEW.AccountNumber

IF Account.CreditBalance + NEW.Amount < Account.CreditLimit THEN

UPDATE Account SET CreditBalance = CreditBalance + NEW.Amount where Number = NEW.AccountNumber;

ELSE

SET NEW.Valid = 0

END IF;

This is the error I get from myPHPAdmin.

27f05e86a86861e3c55aa05f6ec680be.png

解决方案

Updated Answer

This is what I think you want, assuming that Account to Transaction is a 1:N relationship keyed on Number/AccountNumber:

DELIMITER //

-- Assumptions:

-- 1. Transaction.AccountNumber is F.K. REFERENCES Account(Number)

-- 2. Account.Number is UNIQUE

--

CREATE TRIGGER trg_bi_transaction BEFORE INSERT ON Transaction

FOR EACH ROW

BEGIN

-- Adjust account balance (if permitted)

--

UPDATE Account

SET CreditBalance = CreditBalance + NEW.Amount

WHERE Number = NEW.AccountNumber

AND

(CreditBalance + NEW.Amount) < CreditLimit;

-- Was the adjustment valid/permitted?

--

SET NEW.Valid = (ROW_COUNT() = 1);

END //

DELIMITER ;

That trigger will attempt to UPDATE the proper Account for any given Transaction if the CreditLimit permits. The Valid field will be set to 1 if the UPDATE succeeded, and 0 if it did not.

Original Answer

MySQL triggers do not support trigger-level WHERE clauses. Move the Number/NEW.AccountNumber check inside the trigger body.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值