使用触发器来更新表MySQL

时间:2014-06-03 12:57:06

标签: mysql

我有一个TEMP表,当通过网站显示表时,使用存储过程提供数据。这非常有效。我将此表作为可编辑的表,以便在编辑此表中的数据时,它将更新的数据发送回我的TEMP表,再次按此更新。我现在有一个触发器,它将从TEMP获取某些字段并更新我的LIVE db表。

我的问题是,当我根据UPDATED添加其他字段进行更新时,它将对TEMP表中的每一行执行更新。我尝试了各种方法,下面是我最后一次尝试更新该特定行。

CREATE 
DEFINER = 'user'@'%'
    TRIGGER update_epcplanneddate
AFTER UPDATE
ON ims.temp_tobebooked
FOR EACH ROW
    BEGIN
 UPDATE epc_planning p
  INNER JOIN temp_tobebooked b ON b.PropID = p.PropID
 SET
  p.EPCStatus = CASE WHEN p.PropID = b.PropID THEN 3 END, 
  p.EPCPlannedDate = b.EPCPlannedDate,
  p.EPCBookingDate = CASE WHEN p.PropID = b.PropID THEN NOW() END,
  p.LastUpdateDate = CASE WHEN p.PropID = b.PropID THEN NOW() END,
  p.LastUpdateUser = b.InputBy
 WHERE p.PropID = b.PropID;
END

如何更新我需要更新的内容以及基于此更新的额外字段?

1 个答案:

答案 0 :(得分:0)

所以将JOIN改为使用NEW.column现在看起来像这个

CREATE 
DEFINER = 'user'@'%'
    TRIGGER update_epcplanneddate
AFTER UPDATE
ON temp_tobebooked
FOR EACH ROW
    BEGIN
 UPDATE epc_planning p      
 SET
  p.EPCStatus = 3, 
  p.EPCPlannedDate = NEW.EPCPlannedDate,
  p.EPCBookingDate = NOW(),
  p.LastUpdateDate = NOW(),
  p.LastUpdateUser = NEW.InputBy
 WHERE p.PropID = NEW.PropID;
END
相关问题