我正在try 让这个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 ;

奇怪的是(我把它留在这里);//实际上是MySQL文档中的一个例子,但在我运行它时出现了错误(https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html).

推荐答案

我在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 ;

差异:

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

Mysql相关问答推荐

如何有效地计算共同的朋友/追随者?

一次又一次地删除事件行

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

用于搜索从各种表中获得的结果的查询

SQL:创建新列并将现有表中的值追加到新创建的列中

如何在sql中包含0作为计数?

SQL查询以查找两个特定行的总和

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

在 MySQL 中使用非空条件 LAG() 函数

过滤查询结果

当用它的别名替换 (MAX(s.salary) - MIN(s.salary) 它将不起作用.. 为什么?

带有 PARTITION BY 子句的 ROW_NUMBER() 停止在 MariaDB 上工作

MYSQL REGEXP_REPLACE 在数字之后

查询以从约会表中获取可用空档

了解 SQL 中的元组语法

我在查询中没有得到正确的结果

使用 ON DUPLICATE KEY 将列增加一定数量 MySQL NodeJS

为什么 ORDER BY 'id' 'desc' 不返回语法错误?

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

从 MYSQL 查询中计算列的平均值