MySql 触发器不起作用
MySql trigger not works
我有 3 table
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' 的相同数据以及一些其他值。为了保持两个 table 之间的关系,我使用 'tbl_pay_trans'。我想要做的是,当对 tbl_payments(amount,description) 进行更新时,需要在 tbl_transactions(trans_amount,trans_description) 中进行相同的更改。我写了一个触发器来执行此操作,但它没有按预期更新 tbl_transaction table 值。
我的触发器是
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 ;
请有人帮我找出我做错了什么。
它没有更新,因为您在需要使用 NEW
的 amount
和 description
列上使用 OLD
,即
SET new_amount = NEW.amount;
SET new_description = NEW.description;
OLD
指的是 在 更新发生在 tbl_payments
之前的列值。见 manual.
我有 3 table
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' 的相同数据以及一些其他值。为了保持两个 table 之间的关系,我使用 'tbl_pay_trans'。我想要做的是,当对 tbl_payments(amount,description) 进行更新时,需要在 tbl_transactions(trans_amount,trans_description) 中进行相同的更改。我写了一个触发器来执行此操作,但它没有按预期更新 tbl_transaction table 值。
我的触发器是
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 ;
请有人帮我找出我做错了什么。
它没有更新,因为您在需要使用 NEW
的 amount
和 description
列上使用 OLD
,即
SET new_amount = NEW.amount;
SET new_description = NEW.description;
OLD
指的是 在 更新发生在 tbl_payments
之前的列值。见 manual.