mysql触发器中的语法错误

mysql触发器中的语法错误,mysql,sql,triggers,Mysql,Sql,Triggers,我正试图找出这个触发器出了什么问题。我是mysql触发器和存储过程的新手,所以我猜语法可能有问题 -- Trigger DDL Statements DELIMITER $$ USE `SNPB`$$ DROP TRIGGER IF EXISTS getMsnps$$ CREATE TRIGGER getMsnps AFTER INSERT ON m_snps FOR EACH ROW BEGIN DECLARE glid int(10); DECLARE lost in

我正试图找出这个触发器出了什么问题。我是mysql触发器和存储过程的新手,所以我猜语法可能有问题

-- Trigger DDL Statements
DELIMITER $$

USE `SNPB`$$

DROP TRIGGER IF EXISTS getMsnps$$
CREATE TRIGGER getMsnps AFTER INSERT ON m_snps
FOR EACH ROW 
BEGIN

    DECLARE glid int(10);
    DECLARE lost int(1);
    DECLARE st int(10);
    DECLARE vto varchar(20);

    IF(EXISTS( SELECT glyc_id  FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac)) THEN
    SELECT glyc_id,glyc_start INTO glid,st  FROM glyc WHERE glyc_start<=NEW.uni_pos AND glyc_end>=NEW.uni_pos AND glyc.uni_prot_ac=NEW.uni_prot_ac;    
    SELECT all_snps.var_to INTO vto FROM all_snps,snp_map WHERE snp_map.snpb_id=NEW.snpb_id AND snp_map.ref>0 AND snp_map.all_snps_id=all_snp.all_snps_id;
    set lost=0;     
    IF NEW.uni_pos=st AND vto!='n' AND vto!='N' THEN
        set lost=1;
    END IF;
    IF NEW.uni_pos=st+1 AND (vto='p' OR vto='P') THEN
        set lost=1;
    END IF;
    IF NEW.uni_pos=st+2 AND vto!='s' AND vto!='S' AND vto!='t' AND vto!='T' THEN
        set lost=1;
    END IF;
    INSERT INTO glyc_map (glyc_id,snpb_id,loss)  VALUES (glid,NEW.snpb_id,lost);

END IF;  
END;
$$
DELIMITER ;

因此,当我在表m_SNP上插入行时,一条语句插入多行,我应该在glyc_map表中得到一些行,但这永远不会发生。我希望有人能告诉我语法是对的还是错的。

您所有的代码都在if:


如果条件为false,您将不会得到任何结果。

您将得到一个错误1064,但有什么错误消息?@ta.speot.is分隔符语句只针对MySQL命令行客户端,而不是整个RDBMS实现的必要功能。我没有收到任何错误!这才是真正让我心烦的。一切似乎都很好。伙计们非常感谢你们的快速回复,但我找到了答案!这毕竟不是一个语法错误。多谢各位much@user1279904:然后你应该发布一个答案,以方便其他遇到此问题的人-
IF(EXISTS( SELECT glyc_id  FROM glyc ...
    -- rest of code, including the insert statement
END IF;