仅在表更新时触发

时间:2014-03-18 07:02:14

标签: mysql mysql-error-1064

只有在表中进行任何更改时,我才想在更新后触发表。

I tried this

但它给出了错误。 我的代码是

CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory FOR EACH ROW BEGIN IF NEW.ts <> OLD.ts THEN
INSERT INTO Sync_activities (table_name,table_id,admin_id,action) VALUES('Trans_SubCategory',New.id,New.admin_id,'update'); END IF; END;

给出错误

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

但如果我使用

CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory FOR EACH ROW INSERT INTO Sync_activities (table_name,table_id,admin_id,action) VALUES('Trans_SubCategory',New.id,New.admin_id,'update');

我添加了触发器,但即使表中没有进行任何更改也会触发。

1 个答案:

答案 0 :(得分:1)

问题是 - 您忘记设置正确的分隔符。您的第一个语法包含触发器内的多个运算符 - 它们需要由;分隔 - 但您不会更改全局分隔符 - 因此,MySQL会将其视为语法结束 - 因此,“#{是一个错误(因为触发器显然没有完成)。

你的第二个语法是完全执行的,因为它只有一个操作符(也代表触发器结束) - 你没有用BEGIN..END

包围它

要解决此问题,请执行以下操作:

DELIMITER //
CREATE TRIGGER Trans_SubCategory_update AFTER UPDATE ON Trans_SubCategory 
FOR EACH ROW 
BEGIN 
  IF NEW.ts != OLD.ts THEN
    INSERT INTO Sync_activities (table_name,table_id,admin_id,action) VALUES ('Trans_SubCategory', NEW.id, NEW.admin_id,'update');
  END IF; 
END;//
DELIMITER ;