一尘不染

在MySQL数据库中为表格创建触发器(语法错误)

sql

我在为MySQL数据库定义触发器时遇到了麻烦。我想在插入新行(在给定条件下)之前更改文本字段。这是我尝试过的:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END;

但是总会出现错误“语法错误”。我被卡住了,我在做什么错?我正在使用 MySQL 5.0.51a-community

顺便说一句:创建一个空的触发器,像这样工作正常:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
END;

但这也失败了:

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN
  IF 1=1 THEN
  END IF; 
END;

这是我第一次使用stackoverflow.com,因此如果在此处发布内容有帮助,我会感到非常兴奋。


阅读 150

收藏
2021-03-17

共1个答案

一尘不染

您需要更改定界符-MySQL看到第一个“;” 作为CREATE TRIGGER语句的结尾。

试试这个:

/* Change the delimiter so we can use ";" within the CREATE TRIGGER */
DELIMITER $$

CREATE TRIGGER add_bcc
BEFORE INSERT ON MailQueue
FOR EACH ROW BEGIN
  IF (NEW.sHeaders LIKE "%support@mydomain.com%") THEN
    SET NEW.sHeaders = NEW.sHeaders + "BCC:internal@mydomain.com";
  END IF;
END$$
/* This is now "END$$" not "END;" */

/* Reset the delimiter back to ";" */
DELIMITER ;
2021-03-17