mysql SP中的IF/ELSE结构不工作

mysql SP中的IF/ELSE结构不工作,mysql,stored-procedures,Mysql,Stored Procedures,我已经编写了一个存储过程,将学生注册到一个表中。但在这样做之前,它会检查学生是否已经在场,如果已经在场,则不会插入 DELIMITER // CREATE PROCEDURE test(IN sid varchar(6), IN us varchar(20), IN pswd varchar(20)) BEGIN declare temp varchar(20); declare x int; declare y int; set temp=(select username from login

我已经编写了一个存储过程,将学生注册到一个表中。但在这样做之前,它会检查学生是否已经在场,如果已经在场,则不会插入

DELIMITER //
CREATE PROCEDURE test(IN sid varchar(6), IN us varchar(20), IN pswd varchar(20))
BEGIN
declare temp varchar(20);
declare x int;
declare y int;
set temp=(select username from login_student where s_id=sid);
IF(temp == NULL)
THEN insert into login_student values(sid, us, pswd);
ELSEIF (temp != NULL)
THEN set x=x+1; //have written it randomly
ELSE
     set y=y+1; //have written it randomly
END IF;
END //
DELIMITER ;
登录\学生表架构定义为:

CREATE TABLE login_student 
(s_id varchar(6),
 username varchar(20),
 password varchar(20)
);
它给了我一些语法错误,有人能指出错误吗?

我看到两个问题:

  • 您需要使用
    为空
    不为空
    ,而不是
    ==NULL
    !=空
  • 您对MySQL注释使用了错误的语法。使用
    --
    而不是
    /
  • 还应该注意的是,在这种情况下,您将永远无法到达ELSE,因为temp要么是
    NULL
    要么是
    notnull
    ,因此如果需要,您可以将其简化为IF/ELSE

    我建议使用
    SELECT。。。进入
    而不是设置,以设置温度值

    总而言之:

    DELIMITER //
    DROP PROCEDURE IF EXISTS test //
    CREATE PROCEDURE test(IN sid varchar(6), IN us varchar(20), IN pswd varchar(20))
    BEGIN
    declare temp varchar(20);
    declare x int;
    declare y int;
    select username into temp from login_student where s_id=sid;
    IF(temp IS NULL)
    THEN insert into login_student values(sid, us, pswd);
    ELSEIF (temp IS NOT NULL)
    THEN set x=x+1; -- have written it randomly
    ELSE
         set y=y+1; -- have written it randomly
    END IF;
    END //
    DELIMITER ;
    

    获取错误的文本会很好,但我认为应该是:

    IF(temp IS NULL)
        THEN insert into login_student values(sid, us, pswd);
    ELSEIF (temp IS NOT NULL)
        THEN set x=x+1; //have written it randomly
    ELSE
        set y=y+1; //have written it randomly
    END IF;
    

    完美的谢谢:)