为MySQL数据库中的表创建触发器(语法错误)
我很难为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
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没有给出任何关于错误的好提示。。。