본문 바로가기
DB/MySQL

[MySQL] 변수의 종류

by Hyeri.dev 2023. 8. 18.

MySQL에서는 사용자 정의 변수 외의 로컬, 서버 시스템 변수를 지원한다. 이러한 변수들은 MySQL 세션 내에서 사용되며, 데이터를 임시로 저장하거나 설정 값을 조정하는 데 사용된다.

사용자 정의 변수

SELECT @변수명
  • 사용자 정의 변수는 접두사(@)를 사용하여 선언할 수 있다.
  • 저장하는 값에 의해 자료형이 정해지며, Integer, Decimal, Float, Binary, 문자열 타입만 취급할 수 있다.
  • 초기화되지 않은 변수를 참조하면 값은 문자열 타입의 NULL이 된다.

사용자 정의 변수 선언 및 초기화

사용자 정의 변수는 SELECT절 또는 SET절을 사용하여 변수를 선언하고 초기화할 수 있다.

SELECT @변수명 := 대입값;
# OR
SET @변수명 := 대입값;
# OR
SET @변수명 = 대입값;
💡 주의해야 할 점
'=' 는 SET절을 제외한 모든 명령문에서 비교연산자로 취급되므로, SELECT 절에서 변수를 초기화할 경우 ':='를 사용해야 한다.

사용자 정의 변수 사용

프로그래머스 SQL - Group by 문제 <입양 시각 구하기(2) > 풀이

SET @HOUR := -1; # 변수 선언

SELECT (@HOUR := @HOUR + 1) AS HOUR, # 각 행마다 @HOUR + 1한 값을 대입하여 HOUR열 생성
(SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
ORDER BY 1

지역 변수

지역 변수 선언 및 초기화

  • 지역 변수는 사용자가 직접 선언하고 사용하는 변수로 세션 내에서만 유효하다.
  • DECLARE 문을 사용하여 선언하며, BEGINEND 블록 내에서 사용된다.
  • 저장 프로시저나 함수 내에서 임시로 데이터를 저장하거나 처리할 때 유용하다.
  • 지역 변수는 접두사 없이 선언 가능하며, 변수의 유형도 함께 선언해야 한다.
  • 초기값을 할당하지 않으면 NULL 값으로 초기화된다.
DELIMITER //

CREATE PROCEDURE calculate_sum(IN num1 INT, IN num2 INT)
BEGIN
    DECLARE sum INT; -- 지역 변수 선언
    SET sum = num1 + num2; -- 변수에 값을 할당
    SELECT sum; -- 변수 값을 반환
END;
//

DELIMITER ;

-- 저장 프로시저 호출
CALL calculate_sum(5, 7); -- 결과로 12가 반환됨
💡지역 변수는 해당 프로시저 내에서만 유효하므로, 외부에서 접근할 수 없다.

서버 시스템 변수

  • 데이터베이스 서버의 전체 동작을 제어하고 구성하는 데 사용하는 변수
  • 서버의 설멍을 조정하는 데 사용하며 서버의 전역 설정을 변경할 수 있다.
  • SET GLOBAL 또는 SET @@global. 접두사를 사용한다.
  • 시스템 변수는 서버 전체에 영향을 미치므로, 변수 값을 변경할 때 주의해야 한다.
-- 시스템 변수 변경
SET GLOBAL 변수명 = 대입값;

-- 변경된 값 확인
SHOW VARIABLES LIKE '변수명';
💡모든 시스템 변수를 확인하는 경우 LIKE를 이용하여 확인하는 것이 좋다.
SHOW GLOBAL VARIABLES; 
-- 모든 시스템 변수를 확인한다.

SHOW GLOBAL VARIABLES LIKE 'CHAR%'; 
-- 변수 이름이 CHAR로 시작되는 시스템 변수를 확인한다.

 

Reference.

https://stackoverflow.com/questions/11754781/how-to-declare-a-variable-in-mysql

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EB%B3%80%EC%88%98