1

我正在尝试使用 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”相等的地方修改了另一个表。为什么它不起作用?!谢谢!!

4

3 回答 3

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 ;
于 2013-08-07T18:23:43.223 回答
1

如果触发器主体中有多个语句,则必须将它们括在BEGINand之间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
于 2013-08-07T18:36:27.150 回答
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
//

看到这个小提琴看看它工作(注意在 sqlfiddle 上定义分隔符 // 在底栏上)

于 2013-08-07T18:41:17.513 回答