2017-02-27 75 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版本也不支持“分隔符”,我建议你换版。