0

我正在尝试为 UDATES 的表创建触发器。我以为我可以使用多个触发器来做到这一点,但我猜 MySQL 不支持同一类型的一个表上的多个触发器。所以我被迫将其包含在一个触发器中。

基本上我试图根据当前表中更新的内容将新记录插入到不同的表中。

这是我到目前为止所拥有的并且有效:

BEGIN
-- Definition start
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
-- Definition end
END

我需要发生的是type根据用户提供的类型可能会发生变化。因为用户在给定时间只能更新一种类型。我正在考虑一个 IFIF THEN语句,但我不确定如何让它发挥作用。我在想我可以使用列名的字符串值在IF语句中使用,但我不确定这是否可能。

像这样的东西:

    BEGIN
    -- Definition start
    IF(type == 'reg') THEN
    INSERT INTO prices (stationID, price, type, 
    prevPrice, prevDate, dateCreated, apiKey, uid) 
    VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
    OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
    END IF;
    -- Definition end
    END
4

1 回答 1

0

我能够用来IF THEN ELSE完成交易。然后我测试了一个NULL值的条件。如果是TRUE,那么我运行我的代码。现在由于某种原因,它只执行一个INSERT命令,即使该命令UPDATE不止一个。对此有什么想法吗?

BEGIN
-- Definition start
IF(NEW.regPrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.regPrice, 'reg', OLD.regPrice,
OLD.regDate, NEW.regDate, NEW.lastApiUsed, NEW.lastUpdatedBy);

ELSEIF(NEW.midPrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.midPrice, 'mid', OLD.midPrice,
OLD.midDate, NEW.midDate, NEW.lastApiUsed, NEW.lastUpdatedBy);

ELSEIF(NEW.prePrice IS NOT NULL) THEN
INSERT INTO prices (stationID, price, type, 
prevPrice, prevDate, dateCreated, apiKey, uid) 
VALUES(NEW.stationID, NEW.prePrice, 'pre', OLD.prePrice,
OLD.preDate, NEW.preDate, NEW.lastApiUsed, NEW.lastUpdatedBy);
END IF;
-- Definition end
END
于 2012-08-01T12:52:37.800 回答