MySQL IF…THEN后跟查询语句

MySQL IF…THEN后跟查询语句,mysql,sql,stored-functions,Mysql,Sql,Stored Functions,在MySQL中类似的内容是否有效: DELIMITER // CREATE FUNCTION LOGIN_VALIDATE(IN uName VARCHAR(32),IN uPass VARCHAR(32)) RETURNS BOOLEAN BEGIN DECLARE row_count BOOLEAN DEFAULT 0; DECLARE stored_pass VARCHAR(32) DEFAULT NULL; DECLARE valid_return BOOLEAN

在MySQL中类似的内容是否有效:

DELIMITER //
CREATE FUNCTION LOGIN_VALIDATE(IN uName VARCHAR(32),IN uPass VARCHAR(32))
RETURNS BOOLEAN
BEGIN
    DECLARE row_count BOOLEAN DEFAULT 0;
    DECLARE stored_pass VARCHAR(32) DEFAULT NULL;
    DECLARE valid_return BOOLEAN DEFAULT 0;
    SELECT count(*) INTO row_count FROM Login WHERE userId='uName';
    IF row_count = 1 THEN 
        SELECT pWord INTO stored_pass FROM Login WHERE userId='uName';
    END IF;
    IF stored_pass = 'uPass' THEN 
        SET valid_return = 1;
    END IF;
    RETURN valid_return;
END //
DELIMITER ;
使用:

始终尽量减少通过表的次数,以获得所需的结果。SQL是基于设置的,而不是基于过程的-正确使用SQL时,SQL将更适合您。

使用:


始终尽量减少通过表的次数,以获得所需的结果。SQL是基于设置的,而不是程序性的-正确使用SQL时,SQL将更适合您。

我认为
userId
应该是
Login
的主键?为什么要将第一个查询运行到row_count?是的,userId是主键。我将它存储在row_count中,以便以后比较。我假设
userId
应该是
Login
的主键?为什么要将第一个查询运行到row_count?是的,userId是主键。我把它存储在row_count中,以便以后比较。这似乎可以完成工作,是的,这一个更有效,但我只是感到困惑,为什么我的逻辑不起作用,更重要的是,Mimer validator没有给出主要的语法错误,而MySQL提示符在BEGIN附近指示错误。@check123:在MySQL中不使用单引号引用变量-MySQL要求它们要么前缀为“@”,要么不在single(或double)中引号。最初它不起作用,但在删除@并且不使用引号之后,它起作用了。谢谢这似乎可以完成任务,是的,这一个更有效,但我只是不明白为什么我的逻辑不起作用,更重要的是,因为Mimer验证器没有给出主要的语法错误,而MySQL提示符在开始处指示错误。@check123:在MySQL中,您没有使用单引号引用变量-MySQL要求变量的前缀为“@”或者不在单引号(或双引号)内。它最初不起作用,但在删除@并使用无引号后起作用。谢谢
DECLARE valid_return BOOLEAN DEFAULT 0;

SELECT CASE WHEN COUNT(*) = 1 THEN 1 ELSE 0 END
  INTO valid_return
  FROM LOGIN l
 WHERE l.userid = @uName
   AND l.pword = @uPass