为什么这个触发器没有被创建?

Ant*_*ony 2 mysql mysql-workbench

我正在尝试让这个 mysql 触发器在 mysql 工作台中工作。当出现错误时它会很高兴地告诉我,但是当一切看起来正常时它就不会运行。我已经运行了show triggers查询,但没有返回任何内容。运行 v8.0.28。

delimiter //
CREATE TRIGGER add_job_item
AFTER INSERT ON estimate_line
FOR EACH ROW
BEGIN
    IF (NEW.CoreTypeID = 3 AND NEW.CoreResourceID IS NOT NULL) THEN BEGIN
        INSERT INTO job_items (EstimateLineID) VALUES (NEW.EstimateLineID);
    END; # END IF; here doesn't work
END;// # I have tried END; END;//

delimiter ;
Run Code Online (Sandbox Code Playgroud)

奇怪的是(我把它留在这里);//实际上是在 Mysql 文档中作为示例给出的,但是当我运行它时出现错误(https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax. html)。

Bil*_*win 5

我在 MySQL 8.0.31 上测试了它,它有效:

delimiter //
CREATE TRIGGER add_job_item
AFTER INSERT ON estimate_line
FOR EACH ROW
BEGIN
    IF (NEW.CoreTypeID = 3 AND NEW.CoreResourceID IS NOT NULL) THEN
        INSERT INTO job_items (EstimateLineID) VALUES (NEW.EstimateLineID);
    END IF;
END//

delimiter ;
Run Code Online (Sandbox Code Playgroud)

差异:

  • IF必须结束于END IF;.
  • 您不需要在 IF 块中使用BEGIN... END(除非您需要在块中使用 DECLARE)。它已经是一个复合语句,并且接受块中的语句列表。
  • 您确实需要在最后一个之后使用当前分隔符END。也就是说,END//在这个例子中。