안녕 얘들 아 내가이 저장 프로 시저를 작성한 수동으로 otp 유효성 검사를하려고합니다.이 코드를 시작했을 때 좋았지 만 시간이 지나면 오류가 발생했습니다. 약 50 초를 실행하는 데 너무 오랜 시간이 걸렸습니다. 그 후 그것은 오류 잠금 대기 timeout.So 줄 사람이 내게 왜 그런 오류를주는 방법과 그것을 해결하기 위해 말할 수 있습니까?저장 프로 시저 '잠금 대기 시간 초과가 초과되었습니다.'mysql 저장 프로 시저에서 트랜잭션을 다시 시작하십시오 '오류가 있습니까?
CREATE DEFINER=`xxxxx`@`xxxx` PROCEDURE `new_mobile_authentication`(
IN in_macID VARCHAR(500),IN in_otp INT(5),OUT in_msg VARCHAR(100))
BEGIN
DECLARE userCount INT(10);
DECLARE emailID VARCHAR(100);
DECLARE mobileNumber BIGINT(11);
DECLARE checkmatched INT(5);
DELETE FROM mob_user WHERE NOW()>end_time;
SELECT COUNT(*),email,mobile,otp into userCount,emailID,mobileNumber,checkmatched FROM mob_user WHERE mac_id=in_macID ;
SET @checkEmailPresent=(SELECT COUNT(*) FROM table A WHERE email_id=emailID);
IF(userCount!=0 AND @checkEmailPresent!=0)THEN
IF(checkmatched=in_otp)THEN
UPDATE table A SET auth='YES',mac_id=in_macID,mobile_num=mobileNumber WHERE email=emailID;
SET @affRow=(SELECT ROW_COUNT());
DELETE FROM mob_user WHERE mac_id=in_macID;
SELECT @affRow AS affRow,email FROM table A WHERE mac_id=in_macID;
ELSE
SELECT 'invalid otp' INTO in_msg;
END IF;
ELSEIF(userCount!=0 AND @checkEmailPresent=0)THEN
IF(checkmatched=in_otp)THEN
INSERT INTO table A(email,mobile_num,mac_id) VALUE (emailID,mobileNumber,in_macID,);
SET @affRow=(SELECT ROW_COUNT());
DELETE FROM mob_user WHERE mac_id=in_macID;
SELECT @affRow AS affRow,email FROM table A WHERE mac_id=in_macID;
ELSE
SELECT 'invalid otp' INTO in_msg;
END IF;
ELSE
SELECT 'session expired' INTO in_msg;
END IF;
END
첫 번째 선택 ... 왜? .... 그리고 @affRow 변수는 무엇입니까? – Hackerman
첫 번째 선택은 전자 메일이 존재하는지 여부를 확인하는 유효성 검사를위한 것입니까? 그리고 @affRow는 업데이트 된 행 수를 확인하기위한 것입니다. –
하지만 스토어드 프로 시저 실행 결과는'in_msg' ....에 저장되며 sp의 논리적 단계에'@ affRow'를 사용하지 않습니다! – Hackerman