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

为MySQL数据库中的表创建触发器(语法错误),mysql,sql,triggers,Mysql,Sql,Triggers,我很难为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 I

我很难为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,所以如果在这里发布一些有用的东西,我会非常激动:-)

您需要-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 ;

如果删除“SET”,会发生什么?此外,您还应更改NEW.sHeaders+“密件抄送:internal@mydomain.com“致CONCAT(NEW.sHeaders)”,密件抄送:internal@mydomain.com)我是在评论而不是回答,因为这是一个猜测:P汉克斯!我已经试过了,但是语法错误似乎是由if语句引起的。甚至以下操作也会失败:为每行在邮件队列上插入之前创建触发器add_bcc如果1=1,则开始;如果为1,则结束;结束;不幸的是,MySQL没有给出任何关于错误的好提示。。。