MySQL IF…THEN后跟查询语句
在MySQL中类似的内容是否有效: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
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