只有在表中进行任何更改时,我才想在更新后触发表。
但它给出了错误。 我的代码是
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');
我添加了触发器,但即使表中没有进行任何更改也会触发。
答案 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 ;