在触发器中加入更新命令
Posted
技术标签:
【中文标题】在触发器中加入更新命令【英文标题】:join in update command in trigger 【发布时间】:2012-11-06 11:30:31 【问题描述】:我有 3 个表,tbl_image、tbl_vehicle_image 和 tbl_vehicle
tbl_vehicle_image 解决了 tbl_image 和 tbl_vehicle 之间的多对多关系
tbl_vehicle 有一个 last_modified_date
如何创建一个触发器,当我更改例如 tbl_image.img_lnk 时,使用 tbl_vehicle_image 来查找 tbl_vehicle 中使用该图像的所有记录,并将它们的 last_modified_date 设置为 NOW()?
【问题讨论】:
【参考方案1】:你可以这样做:
DELIMITER $$;
create TRIGGER UpdateLastmodifiedDate AFTER UPDATE ON tbl_image
FOR EACH ROW
BEGIN
UPDATE tbl_vehicle v
INNER JOIN tbl_vehicle_image vi ON v.vehicleId = vi.vehicleID
INNER JOIN tbl_image i ON vi.imageid = i.id
SET v.lastmodified_date = NOW()
WHERE i.img_lnk = NEW.img_lnk;
END$$
【讨论】:
我会发布她的,因为它正在讨论这个答案,我在顶部添加了 DELIMITER $$ 并在最后一行添加了一个分号(WHERE i.....)并且语法问题消失了【参考方案2】:CREATE TRIGGER `trig_after_image_update` AFTER UPDATE ON `tbl_image`
FOR EACH ROW
if old.img_lnk<>NEW.img_lnk
then
update tbl_vehicle set last_modified_date=NOW() where id in (select vehicle_id from tbl_vehicle_image where image_id=OLD.id);
end if;
我没有您表的所有字段名称,因此请更改它们。我已经使用 id 作为对应表的主键。
【讨论】:
对于这两个答案,我都得到“语法错误,意外结束” @KellyLarsen - 尝试使用END$$
而不是END
。
@KellyLarsen 在起跑线上使用set delimiter $$
。
我在集合分隔符 $$ 中的 $$ 下收到“语法错误,意外 IDENT_QUOTED,期待 EQ 或 SET_VAR”
在开始 DELIMITER $$
时使用它而不是第一个。以上是关于在触发器中加入更新命令的主要内容,如果未能解决你的问题,请参考以下文章
java swing中实现列表中加入单选按钮,单选按钮发生变化时能触发事件
是啥触发 Elastic Beanstalk 拉入更新的 Docker 映像