MySQL 변수 선언의 두 가지 방식
MySQL에서는 일반 쿼리 내에서 변수를 선언하고 활용할 수 있습니다. MySQL의 변수는 크게 두 가지 방식으로 선언할 수 있는데, 하나는 세션 변수(Session Variable)이고 다른 하나는 지역 변수(Local Variable)입니다.
1. 세션 변수 선언 (@변수명)
세션 변수는 @변수명 형태로 선언하며, SET 명령어를 사용해 값을 할당합니다. 세션 변수는 현재 접속 중인 세션 전체에서 유효하기 때문에 여러 쿼리에서 재사용할 수 있다는 장점이 있습니다.
세션 변수를 생성하는 기본 문법은 다음과 같습니다.
SET @변수명 := 값;
2. 지역 변수 선언 (DECLARE)
지역 변수는 DECLARE 명령어를 사용하여 선언합니다. 주로 저장 프로시저(Stored Procedure)나 함수 내부에서 사용되며, 해당 블록 안에서만 유효합니다.
DECLARE 변수명 데이터타입;
또한 변수를 선언하는 시점에 기본값(default)을 함께 지정할 수도 있습니다.
DECLARE 변수명 데이터타입 DEFAULT '기본값';
세션 변수 실습 예제
이제 세션 변수가 실제로 어떻게 동작하는지 예제를 통해 살펴보겠습니다. 먼저 실습용 테이블을 생성합니다.
테이블 생성
mysql> create table SessionVariableDemo
-> (
-> EmployeeId varchar(10),
-> EmployeeName varchar(30),
-> EmployeeAge int
-> );
Query OK, 0 rows affected (0.70 sec)샘플 데이터 입력
INSERT 명령어를 사용해 직원 정보를 테이블에 입력합니다.
mysql> insert into SessionVariableDemo values('EMP-101','Carol',30);
Query OK, 1 row affected (0.20 sec)
mysql> insert into SessionVariableDemo values('EMP-102','John',26);
Query OK, 1 row affected (0.20 sec)
mysql> insert into SessionVariableDemo values('EMP-103','Bob',25);
Query OK, 1 row affected (0.19 sec)
mysql> insert into SessionVariableDemo values('EMP-104','Sam',32);
Query OK, 1 row affected (0.14 sec)
mysql> insert into SessionVariableDemo values('EMP-105','Mike',35);
Query OK, 1 row affected (0.11 sec)
mysql> insert into SessionVariableDemo values('EMP-106','David',33);
Query OK, 1 row affected (0.15 sec)전체 데이터 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from SessionVariableDemo;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | EMP-101 | Carol | 30 | | EMP-102 | John | 26 | | EMP-103 | Bob | 25 | | EMP-104 | Sam | 32 | | EMP-105 | Mike | 35 | | EMP-106 | David | 33 | +------------+--------------+-------------+ 6 rows in set (0.00 sec)
세션 변수 생성 및 쿼리 적용
이제 SET 명령어로 나이가 30보다 큰 조건을 담은 세션 변수를 생성합니다.
mysql> set @AgeGreaterThan30:=30; Query OK, 0 rows affected (0.00 sec)
생성한 세션 변수를 WHERE 절에 활용하여 나이가 30살을 초과하는 직원 레코드만 조회하는 쿼리는 다음과 같습니다.
mysql> select *from SessionVariableDemo where EmployeeAge > @AgeGreaterThan30;
실행 결과는 다음과 같습니다.
+------------+--------------+-------------+ | EmployeeId | EmployeeName | EmployeeAge | +------------+--------------+-------------+ | EMP-104 | Sam | 32 | | EMP-105 | Mike | 35 | | EMP-106 | David | 33 | +------------+--------------+-------------+ 3 rows in set (0.00 sec)
정리
이처럼 MySQL에서는 @ 기호를 사용한 세션 변수와 DECLARE를 사용한 지역 변수 두 가지 방식으로 변수를 선언할 수 있습니다. 세션 변수는 일반 쿼리에서 바로 사용 가능하며 조건값을 동적으로 관리할 때 유용하고, 지역 변수는 저장 프로시저나 함수 내부에서 복잡한 로직을 처리할 때 활용됩니다. 상황에 맞게 두 방식을 적절히 사용하면 쿼리의 가독성과 재사용성을 크게 높일 수 있습니다.