我正在尝试使用2个表在MySQL上创建一个触发器。我可以在另一个数据库中执行此操作,但在另一个数据库中调整相同的代码会在几小时后给出语法错误!
CREATE TRIGGER `free_video_used` AFTER UPDATE ON `user`
FOR EACH ROW
IF new.field = 1 THEN
UPDATE free_video SET free_video.used = 1 WHERE free_video.uid = NEW.uid;
END IF;
在对“user”表进行更新后,您可以轻松理解,另一个表被修改,其中字段“uid”相等。为什么不工作?! 谢谢!
答案 0 :(得分:1)
尝试:
DELIMITER $$
CREATE TRIGGER `free_video_used` AFTER UPDATE ON `user`
FOR EACH ROW
BEGIN
IF (new.field = 1) THEN
UPDATE free_video SET free_video.used = 1 WHERE free_video.uid = new.uid;
END IF;
END$$
DELIMITER ;
答案 1 :(得分:1)
如果您的触发器主体中有多个语句,则必须将它们括在BEGIN
和END
之间。见http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html:
通过使用BEGIN ... END构造,您可以定义一个触发器 执行多个语句。在BEGIN块中,您也可以使用 存储例程中允许的其他语法,例如 条件和循环
在这里你必须写一些像这样的:
CREATE TRIGGER `free_video_used` AFTER UPDATE ON `user`
FOR EACH ROW
BEGIN
IF new.field = 1 THEN
UPDATE free_video SET free_video.used = 1 WHERE free_video.uid = NEW.uid;
END IF;
END
答案 2 :(得分:1)
您的代码基本上是正确的,这是在同一语句中使用多个;
的问题。
试试这样:
DELIMITER //
CREATE TRIGGER `free_video_used` AFTER UPDATE ON `user`
FOR EACH ROW
BEGIN
IF new.field = 1 THEN
UPDATE free_video SET free_video.used = 1 WHERE free_video.uid = NEW.uid;
END IF;
END
//
请参阅此fiddle以查看它是否有效(请注意,在sqlfiddle上,您可以在底栏上定义分隔符//)