2014-02-10 33 views
0

我想我的MySQL數據庫中創建一個觸發器,但我總是得到錯誤:SQL錯誤#1064,同時創建觸發器

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' BEGIN DECLARE tmppl INT; SELECT MAX(PortListID) FROM pj_servers INTO t ' at line 2

這是查詢。 我只是找不到錯誤。

CREATE TRIGGER init_new_server AFTER INSERT ON pj_servers 
BEGIN 
    DECLARE tmppl INT; 
    SELECT MAX(PortListID) FROM pj_servers INTO tmppl; 

    INSERT INTO pj_servers (Registered, PortListID) 
    VALUES (Current_Timestamp, (tmppl+1)) 
    WHERE pj_servers.ID = NEW.ID; 

    INSERT INTO pj_serverports (PortList, Port, isOpen, Script) 
    VALUES (tmppl+1, 80, TRUE, "say(\"Hallo\""); 
END$$ 

回答

1

按照MySQL Reference Manual

CREATE 
    [DEFINER = { user | CURRENT_USER }] 
    TRIGGER trigger_name 
    trigger_time trigger_event 
    ON tbl_name FOR EACH ROW 
    trigger_body 

trigger_time: { BEFORE | AFTER } 

trigger_event: { INSERT | UPDATE | DELETE } 

所以也許你在第一線

0

確定發現失蹤FOR EACH ROW,DNLL是正確與FOR EACH ROW也是我試圖使InsertWHERE聲明,這顯然無法正常工作。

固定代碼是:

CREATE TRIGGER init_new_server AFTER INSERT ON pj_servers 
FOR EACH 
ROW BEGIN 
DECLARE tmppl INT; 

SELECT MAX(PortListID) 
FROM pj_servers 
INTO tmppl; 

UPDATE pj_servers SET Registered = CURRENT_TIMESTAMP , 
PortListID = tmppl +1 WHERE pj_servers.ID = NEW.ID; 

INSERT INTO pj_serverports(PortList, Port, isOpen, Script) 
VALUES (
tmppl +1, 80, 
TRUE , "say(\"Hallo\")" 
); 

END