首页 > 解决方案 > MySql 触发器不起作用

问题描述

我有 3 张桌子

tbl_payments(pay_id,date,amount,description,-------)
tbl_pay_trans(pay_id,trans_id)
tbl_transactions(trans_id,trans_date,trans_amount,trans_description,-----)

'tbl_transaction' 具有来自 'tbl_payments' 的相同数据以及一些其他值。为了维护两个表之间的关系,我使用了“tbl_pay_trans”。我想要做的是,当对 tbl_payments(amount,description) 进行更新时,需要在 tbl_transactions(trans_amount,trans_description) 中进行相同的更改。我写了一个触发器来做到这一点,但它并没有像它应该的那样更新 tbl_transaction 表值。

我的触发器是

DELIMITER $$
CREATE TRIGGER update_trans 
    AFTER UPDATE on tbl_payments
    FOR EACH ROW
BEGIN
    DECLARE new_amount VARCHAR(50);
    DECLARE new_description TEXT;
    DECLARE new_pay_id,new_trans_id INT;

    SET new_pay_id = OLD.pay_id;
    SET new_amount = OLD.amount;
    SET new_description = OLD.description;
    SELECT trans_id INTO new_trans_id FROM tbl_pay_trans WHERE pay_id = new_pay_id;

    UPDATE tbl_transactions SET 
    trans_amount = new_amount,
    trans_description = new_description
    WHERE trans_id = new_trans_id;
END$$
DELIMITER ;

请有人帮我弄清楚我做错了什么。

标签: mysqlselecttriggerssql-updatedeclare

解决方案


它没有更新,因为您在需要使用OLD的列上amount使用iedescriptionNEW

SET new_amount = NEW.amount;
SET new_description = NEW.description;

OLD指更新发生tbl_payments的列值。请参阅手册


推荐阅读