2009-01-22 72 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 ;