Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL의 사용자 정의 변수 대 로컬 변수?

<시간/>

사용자 정의 변수는 세션별 변수라고도 합니다. 세션의 어딘가에서 초기화될 수 있는 느슨한 형식의 변수이며 세션이 끝날 때까지 사용자 정의 변수의 값을 포함합니다.

사용자 정의 변수에는 @ 기호가 접두사로 붙습니다. 예:

@anyVariableName;

사용자 정의 변수를 초기화할 수 있는 두 가지 방법이 있습니다. SET 명령을 사용하거나 SELECT 쿼리를 사용할 수 있습니다. 첫 번째 접근 방식은 다음과 같습니다.

SET @anyVariableName=anyValue;

두 번째 접근 방식은 다음과 같습니다.

SELECT @anyVariableName :=anyValue;

SELECT 쿼리에서 콜론(:)을 사용하지 않으면 표현식으로 평가됩니다. 결과는 참 또는 거짓입니다:

mysql> select @m=10;

다음은 출력입니다.

+-------+
| @m=10 |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

로컬 변수는 저장 프로시저, 함수 등에서 사용할 수 있습니다. DECLARE 키워드와 함께 사용됩니다. 사용자 정의 변수와 같은 @ 접두사는 필요하지 않습니다.

지역 변수에 대한 구문은 다음과 같습니다.

DECLARE yourVariableName dataType;

참고 :로컬 변수와 사용자 정의 변수의 가장 큰 차이점은 세션별 변수나 사용자 정의 변수는 NULL로 다시 초기화되지 않는 반면 저장 프로시저가 호출될 때마다 로컬 변수는 NULL 값으로 다시 초기화된다는 점입니다. 한 사용자가 설정한 사용자 정의 변수는 다른 사용자가 볼 수 없습니다. 주어진 사용자에 대한 세션 변수는 사용자가 종료할 때 자동으로 소멸됩니다.

다음은 저장 프로시저가 있는 세션별 변수 및 로컬 변수의 데모입니다. 로컬 변수와 사용자 정의 변수를 사용하여 저장 프로시저를 생성하는 쿼리는 다음과 같습니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_LocalAndUserDefinedVariableDemo()
   -> BEGIN
   -> DECLARE localVariable int default 10;
   -> SET localVariable=localVariable+10;  
   -> SET @userVariable=@userVariable+10;
   -> SELECT localVariable;
   -> SELECT @userVariable;
   -> END;
   -> //
Query OK, 0 rows affected (0.39 sec)
mysql> DELIMITER ;

이제 사용자 정의 변수의 값을 설정합니다. 쿼리는 다음과 같습니다.

mysql> SET @userVariable=10;
Query OK, 0 rows affected (0.00 sec)

이제 저장 프로시저를 호출합니다. 첫 번째 호출에서 사용자 정의 변수는 10+10=20이고 로컬 변수는 10+10=20입니다.

호출 명령을 사용하여 저장 프로시저 호출:

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

다음은 출력입니다.

+---------------+
| localVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.32 sec)
+---------------+
| @userVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.34 sec)
Query OK, 0 rows affected (0.36 sec)

두 번째 호출에서 사용자 정의 변수는 값 20을 보유하고 20+10=30과 같이 10을 추가하는 반면 로컬 변수는 다시 10으로 다시 초기화되고 10+10=20과 같이 10을 추가합니다.

저장 프로시저를 호출하고 샘플 출력을 확인합니다.

mysql> CALL sp_LocalAndUserDefinedVariableDemo();

다음은 출력입니다.

+---------------+
| localVariable |
+---------------+
|            20 |
+---------------+
1 row in set (0.00 sec)
+---------------+
| @userVariable |
+---------------+
|            30 |
+---------------+
1 row in set (0.01 sec)
Query OK, 0 rows affected (0.02 sec)

세 번째 호출에서 사용자 정의 변수는 값 30을 유지하고 30+10=40과 같이 10을 추가하는 반면 지역 변수는 다시 10으로 다시 초기화하고 10+10=20과 같이 10을 추가합니다.

이제 모든 프로시저 호출에서 로컬 변수가 NULL일 수 있는 값 또는 제 경우와 같이 기본값 10을 제공한 것과 같은 다른 값으로 다시 초기화된다고 말할 수 있습니다. 이것은 로컬 변수를 값 10으로 설정한다는 의미입니다. 사용자 정의 변수가 아닌 동안 모든 프로시저 호출.