MySQL에서는 SET 명령어를 사용하여 세션 내에서만 유효한 임시(사용자 정의) 변수에 값을 손쉽게 할당할 수 있습니다. 이 기능은 특정 조건에 맞는 값을 여러 쿼리에서 재사용하거나, 복잡한 로직을 단계별로 처리할 때 매우 유용합니다.
임시 변수 할당 기본 문법
SET 명령어와 서브쿼리를 함께 사용하는 기본 문법은 다음과 같습니다.
SET @변수이름 = (SELECT 컬럼명 FROM 테이블명 WHERE 조건);
예제용 테이블 생성하기
문법을 실제로 이해하기 위해 먼저 예제 테이블을 생성해 보겠습니다.
mysql> create table tempVariableAssignment
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (0.59 sec)샘플 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into tempVariableAssignment(Name,Age) values('John',25);
Query OK, 1 row affected (0.14 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Carol',26);
Query OK, 1 row affected (0.17 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Sam',28);
Query OK, 1 row affected (0.13 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('David',19);
Query OK, 1 row affected (0.19 sec)
mysql> insert into tempVariableAssignment(Name,Age) values('Bob',23);
Query OK, 1 row affected (0.19 sec)전체 레코드 조회하기
SELECT 문으로 테이블의 모든 데이터를 확인해 보겠습니다.
mysql> select *from tempVariableAssignment;
실행 결과는 다음과 같습니다.
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 25 | | 2 | Carol | 26 | | 3 | Sam | 28 | | 4 | David | 19 | | 5 | Bob | 23 | +----+-------+------+ 5 rows in set (0.00 sec)
SET 명령어로 변수 할당하기
이제 Id가 4인 행(David)의 나이 값을 @findAge라는 임시 변수에 할당해 보겠습니다.
mysql> set @findAge=(select Age from tempVariableAssignment where Id=4); Query OK, 0 rows affected (0.02 sec)
변수 값 확인하기
할당된 변수 값은 다음과 같이 간단히 조회할 수 있습니다.
mysql> select @findAge;
결과:
+----------+ | @findAge | +----------+ | 19 | +----------+ 1 row in set (0.01 sec)
SELECT INTO를 활용한 대안 방법
SET 외에도 SELECT ... INTO 구문을 사용하여 같은 결과를 얻을 수 있습니다.
mysql> select Age INTO @anotherAge -> from tempVariableAssignment where Id=4; Query OK, 1 row affected (0.00 sec)
@anotherAge 변수의 값을 확인해 보겠습니다.
mysql> select @anotherAge;
결과:
+-------------+ | @anotherAge | +-------------+ | 19 | +-------------+ 1 row in set (0.00 sec)
정리
MySQL에서 임시 변수에 값을 할당하는 방법은 크게 두 가지입니다. 첫째, SET @변수 = (서브쿼리) 형태로 값을 직접 대입하는 방식이고, 둘째, SELECT 컬럼 INTO @변수 형태로 조회 결과를 바로 저장하는 방식입니다. 두 방법 모두 세션 단위로 유지되며, 연결이 종료되면 변수도 함께 사라진다는 점을 기억하시기 바랍니다.