MySQL에서 사용자 정의 변수(User-Defined Variables)가 무엇인지, 그리고 실무에서 어떻게 활용할 수 있는지 알아보겠습니다. 먼저 사용자 정의 변수를 다룰 때 반드시 알아야 할 핵심 규칙부터 살펴봅니다.
사용자 정의 변수의 주요 규칙
사용자 변수는
@var_name형태로 작성합니다. 여기서 'var_name'은 변수 이름을 의미하며, 영숫자 문자와 마침표(.), 밑줄(_), 달러 기호($)로 구성됩니다.변수 이름에 위 문자 외의 다른 문자를 포함하려면, 해당 문자를 문자열(string) 또는 식별자(identifier)로 따옴표 처리해야 합니다.
사용자 정의 변수는 세션(session) 단위로 동작합니다.
한 클라이언트가 정의한 사용자 변수는 다른 클라이언트가 조회하거나 사용할 수 없습니다.
단, 예외적으로 Performance Schema의
user_variables_by_thread테이블에 대한 접근 권한이 있는 사용자는 모든 세션의 모든 사용자 변수를 확인할 수 있습니다.클라이언트 세션이 종료되면 해당 세션의 모든 변수는 자동으로 해제됩니다.
사용자 변수 이름은 대소문자를 구분하지 않으며, 최대 길이는 64자입니다.
기본 구문(Syntax)
사용자 정의 변수를 설정하는 대표적인 방법은 SET 문을 사용하는 것입니다. 아래 명령어 형식으로 변수를 선언하고 값을 할당할 수 있습니다.
SET @var_name = expr [, @var_name = expr] ...
SET 문을 사용할 때는 = 또는 :=를 할당 연산자로 사용할 수 있습니다. 참고로 SELECT 문 안에서 변수에 값을 할당할 때는 반드시 :=를 사용해야 합니다.
값 할당하기
사용자 변수에는 제한된 데이터 타입 집합의 값만 할당할 수 있으며, 여기에는 정수(integer), 소수(decimal), 부동 소수점(floating-point), 바이너리 또는 논바이너리 문자열(binary/nonbinary string), 그리고 NULL 값이 포함됩니다.
소수(decimal) 및 실수(real) 값을 할당할 때는 값의 정밀도(precision)와 스케일(scale)가 유지되지 않습니다.
허용되지 않는 타입의 값은 자동으로 허용 가능한 타입으로 변환됩니다.
이러한 타입 강제(coercibility) 규칙은 테이블 컬럼 값에 적용되는 규칙과 동일합니다.
MySQL 사용자 변수는 쿼리 결과를 클라이언트 측 임시 변수에 따로 저장하지 않고도 기억해야 할 때 매우 유용합니다.
메모리 위치를 명시적으로 지정하지 않고도 데이터를 손쉽게 저장하고 재사용할 수 있습니다.
활용 예시
-- 변수에 값 할당
SET @total_sales = 0;
-- 쿼리 결과를 변수에 저장
SELECT SUM(price) INTO @total_sales FROM orders;
-- 변수를 조건으로 활용
SELECT * FROM orders WHERE price > @total_sales / 10;
이처럼 사용자 정의 변수를 활용하면 복잡한 쿼리 내에서 중간 계산 결과를 재사용할 수 있어 코드의 가독성과 효율성을 높일 수 있습니다.