mysql - 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 ;
请有人帮我弄清楚我做错了什么。
解决方案
它没有更新,因为您在需要使用OLD
的列上amount
使用iedescription
NEW
SET new_amount = NEW.amount;
SET new_description = NEW.description;
OLD
指更新发生前tbl_payments
的列值。请参阅手册。
推荐阅读
- python - Pandas Dataframe 3D 曲面图
- sql - 我在写游标时收到错误 ORA-01001 无效游标显示偶数条记录
- javascript - 如何在JSX中仅链接一个.map数组的一个元素
- c# - 服务文件供下载。浏览器忽略文件名并使用“file.nothing”代替
- flutter - V/PlayerBase(2113): baseStop() piid=23127 Flutter
- php - 如何使 MySQL INTO OUTFILE 输出可按组/每个人写入?
- dpdk - 在 mbuf 中嵌入缓存对齐的元数据
- python - 使用 Python Paramiko 通过双 SSH 隧道连接到数据库
- javascript - Vue apexcharts Y轴标签隐藏在水平条形图中
- r - 计算列的平均值以及下一列中的注释