MYSQL触发器根据插入的值更新不同的表

时间:2016-01-26 23:26:41

标签: mysql triggers

我需要使用从车辆中插入的行获得的值更新oc_product_attribute。我怎样才能获得这个特定价值? (xxxCOLUMN_VALUExxx)

CREATE TRIGGER vehicle_attributes AFTER INSERT ON vehicles
   FOR EACH ROW
        BEGIN
           UPDATE oc_product_attribute SET oc_product_attribute.vehicle_name =
             (SELECT CONCAT(vehicles.make_name, ' ', vehicles.model_name, ' ', 
              vehicles.chassis) FROM vehicles WHERE vehicles.id = xxxCOLUMN_VALUExxx) 
           WHERE oc_product_attribute.id =  xxxCOLUMN_VALUExxx

        END

下面简化:我在MYSQL中仍然出错:

CREATE TRIGGER vehicle_attributes AFTER INSERT ON vehicles
   FOR EACH ROW
     BEGIN
       UPDATE oc_product_attribute 
         SET oc_product_attribute.vehicle_name = 
           CONCAT(NEW.make_name,' ',NEW.model_name,' ',NEW.chassis);            
     END;

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第7行

进一步简化:

CREATE TRIGGER vehicle_attributes AFTER INSERT ON vehicles
  FOR EACH ROW
   BEGIN
     UPDATE oc_product_attribute 
      SET oc_product_attribute.vehicle_name = 'test' WHERE 1         
   END;

我仍然得到同样的错误 - 可能是MYSQL没有启用触发器吗?

1 个答案:

答案 0 :(得分:0)

我想您需要像这样更新oc_product_attribute

CREATE TRIGGER vehicle_attributes AFTER INSERT ON vehicles
FOR EACH ROW
    BEGIN
       UPDATE oc_product_attribute 
         SET oc_product_attribute.vehicle_name = 
           CONCAT(NEW.make_name,' ',NEW.model_name,' ',NEW.chassis) 
       WHERE oc_product_attribute.id = NEW.id; 
    END

虽然我不确定oc_product_attribute.id是否持有vehicles.id。但是,重要的一点是,在INSERT AFTER TRIGGER中,您可以通过NEW.columnName访问插入行的值。

N.B。在更新触发器中,您还可以使用OLD.columnName

访问更改前的值