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 문을 사용하여 선언하며, BEGIN과 END 블록 내에서 사용된다.
- 저장 프로시저나 함수 내에서 임시로 데이터를 저장하거나 처리할 때 유용하다.
- 지역 변수는 접두사 없이 선언 가능하며, 변수의 유형도 함께 선언해야 한다.
- 초기값을 할당하지 않으면 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
'DB > MySQL' 카테고리의 다른 글
[MySQL] MySQL 데이터 타입 - Java 데이터 타입 (0) | 2024.05.18 |
---|---|
날짜로 데이터 조회 시 주의할 점(날짜 범위) (3) | 2024.04.16 |
[MySQL] 문자열 일부를 추출하거나 자르는 함수 (0) | 2023.08.27 |
[MySQL] 날짜 차이 비교하는 함수 (0) | 2023.08.24 |
[MySQL] IFNULL() : 컬럼의 값이 NULL일 때, 값을 변경하는 방법 (0) | 2023.08.16 |