2009-01-22 24 views
16

我无法为MySQL数据库定义触发器。我想在插入新行之前更改文本字段(在给定的条件下)。这是我已经尝试过:在MySQL数据库中创建表的触发器(语法错误)

CREATE TRIGGER add_bcc 
BEFORE INSERT ON MailQueue 
FOR EACH ROW BEGIN 
    IF (NEW.sHeaders LIKE "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]"; 
    END IF; 
END; 

但总是我得到错误“错误的语法”。我卡住了,我做错了什么? 我使用MySQL的5.0.51a社区

BTW:创建一个空的触发条件中能正常工作:

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,所以我很兴奋,如果它是有用的张贴在这里:-)

+0

会发生什么事,如果你删除 “SET”?你也应该将NEW.sHeaders +“BCC:[email protected]”更改为CONCAT(NEW.sHeaders,“BCC:[email protected]”) – Greg 2009-01-22 16:24:25

回答

27

你需要change the delimiter - 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 "%[email protected]%") THEN 
    SET NEW.sHeaders = NEW.sHeaders + "BCC:[email protected]"; 
    END IF; 
END$$ 
/* This is now "END$$" not "END;" */ 

/* Reset the delimiter back to ";" */ 
DELIMITER ;