2017-02-27 76 views
1

我在MySQL 5.1.63社區編寫觸發器,總是注意:#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在第6行的''附近使用正確的語法,但是我在navicat中爲mysql運行代碼,沒關係。在MySQL 5.1.63社區觸發的錯誤

代碼在這裏:

CREATE TRIGGER trig_sign 
AFTER insert on students 
for each row 
Begin 
INSERT INTO sign_in(num,uptime,flag,sid) 
     values(null,now(),false,NEW.sid); 
end; 
+0

對於單行觸發器,您不需要使用'BEGIN'和'END'。 –

回答

0

如果觸發器主體只包含一個聲明,你不需要使用BEGINEND

CREATE TRIGGER trig_sign AFTER INSERT on students FOR EACH ROW 
    INSERT INTO sign_in(num,uptime,flag,sid) VALUES(null,now(),false,NEW.sid); 

對於多個語句觸發你需要切換的分隔符:

DELIMITER // 

CREATE TRIGGER trig_sign 
AFTER INSERT on students 
FOR EACH ROW 
BEGIN 
    INSERT INTO sign_in(num,uptime,flag,sid) 
     VALUES(null,now(),false,NEW.sid); 
    -- more statements 
END // 

DELIMITER ; 
+0

我也嘗試過這樣做,但MySQL服務器版本是該死的,它不支持「分隔符」,我只是通過我的室友的MyPhpAdmin的MYSQL來找到它。你的代碼是正確的!非常感謝你!我必須更改我的mysql版本。 –

0

你必須重新定義delimiter這樣的:

delimiter || 
CREATE TRIGGER trig_sign 
AFTER insert on students 
for each row 
Begin 
INSERT INTO sign_in(num,uptime,flag,sid) 
     values(null,now(),false,NEW.sid); 
end || 
delimiter; 

還可以看到官方文檔大約delimiter這裏。

0

大家誰對我有一些問題,你可以按照Paul Spiegel的代碼。如果它不起作用,我認爲你的mysql版本也不支持「分隔符」,我建議你換版。