17

我无法为 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,所以如果在这里发布一些东西有帮助,我会非常兴奋 :-)

4

1 回答 1

29

您需要更改分隔符- 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 ;
于 2009-01-22T16:38:27.637 回答