使用语法将触发器从一个表移动到另一个表

时间:2012-05-24 20:40:31

标签: mysql triggers

我必须从该表的备份版本中恢复表。然后我去重建触发器。我无法重新创建一个。我已经看过一些关于这种触发器在这里看起来什么都没有看到的例子。我从phpmyadmin中显示的代码中复制它,当我点击旧的触发器上的“更改”来保存它。我认为那将是万无一失的!

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第5行的''附近使用正确的语法

CREATE TRIGGER `trig_parts_price_AfterUpdate` AFTER UPDATE ON `parts`
    FOR EACH ROW BEGIN
       IF (NEW.cost <> OLD.cost || NEW.price <> OLD.price || NEW.QtyInStock <> OLD.QtyInStock) THEN
          INSERT INTO `inv_hist_simple` (sku, cost, price, QtyInStock, change_date) 
          VALUES(OLD.sku_m, NEW.cost, NEW.price, NEW.QtyInStock, NOW());
    END IF;
END;

1 个答案:

答案 0 :(得分:2)

将此行放在代码上方:

DELIMITER $$

并将代码的最后一行更改为

END $$

然后在最后添加这一行:

DELIMITER ;

否则;告诉服务器,在insert语句之后触发器的代码结束,这导致语法错误。

所以它基本上应该是这样的:

DELIMITER $$
CREATE TRIGGER `trig_parts_price_AfterUpdate` AFTER UPDATE ON `parts`
    FOR EACH ROW BEGIN
       IF (NEW.cost <> OLD.cost || NEW.price <> OLD.price || NEW.QtyInStock <> OLD.QtyInStock) THEN
          INSERT INTO `inv_hist_simple` (sku, cost, price, QtyInStock, change_date) 
          VALUES(OLD.sku_m, NEW.cost, NEW.price, NEW.QtyInStock, NOW());
    END IF;
END $$
DELIMITER ;