MySQL에는 다른 프로그래밍 언어처럼 배열(array) 자료형이 기본적으로 제공되지 않습니다. 따라서 배열 변수를 직접 흉내 내기보다는 임시 테이블(Temporary Table)을 활용하는 것이 가장 효과적이고 실용적인 방법입니다.
임시 테이블 생성 문법
배열 변수 대신 사용할 수 있는 임시 테이블 생성 구문은 다음과 같습니다.
create temporary table if not exists yourTemporaryTableName select yourColumnName1,yourColumnName2,......N from yourTableName where condition
위 구문을 이해하기 위해 먼저 예제 테이블을 하나 만들어 보겠습니다.
1단계: 테이블 생성
다음 쿼리로 예제 테이블을 생성합니다.
mysql> create table SimulateArrayDemo -> ( -> Id int, -> FirstName varchar(100), -> LastName varchar(100) -> ) -> ; Query OK, 0 rows affected (1.25 sec)
2단계: 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into SimulateArrayDemo values(1,'Sam','Taylor'); Query OK, 1 row affected (0.10 sec) mysql> insert into SimulateArrayDemo values(2,'Carol','Taylor'); Query OK, 1 row affected (0.18 sec) mysql> insert into SimulateArrayDemo values(3,'Bob','Smith'); Query OK, 1 row affected (0.09 sec) mysql> insert into SimulateArrayDemo values(4,'David','Taylor'); Query OK, 1 row affected (0.16 sec) mysql> insert into SimulateArrayDemo values(5,'John','Smith'); Query OK, 1 row affected (0.11 sec) mysql> insert into SimulateArrayDemo values(6,'Mike','Taylor'); Query OK, 1 row affected (0.21 sec)
3단계: 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from SimulateArrayDemo;
출력 결과
+------+-----------+----------+ | Id | FirstName | LastName | +------+-----------+----------+ | 1 | Sam | Taylor | | 2 | Carol | Taylor | | 3 | Bob | Smith | | 4 | David | Taylor | | 5 | John | Smith | | 6 | Mike | Taylor | +------+-----------+----------+ 6 rows in set (0.00 sec)
4단계: 임시 테이블로 배열 변수 시뮬레이트하기
아래 쿼리는 조건에 맞는 데이터를 임시 테이블에 담아 마치 배열 변수처럼 활용하는 예시입니다. 여기서는 성(LastName)이 'Taylor'인 행들만 추출합니다.
mysql> create temporary table if not exists SimulationOfArray -> select Id,FirstName from SimulateArrayDemo where LastName='Taylor'; Query OK, 4 rows affected (0.10 sec) Records: 4 Duplicates: 0 Warnings: 0
5단계: 임시 테이블 결과 확인
생성된 임시 테이블의 레코드를 조회해 봅니다.
mysql> select *from SimulationOfArray;
출력 결과
+------+-----------+ | Id | FirstName | +------+-----------+ | 1 | Sam | | 2 | Carol | | 4 | David | | 6 | Mike | +------+-----------+ 4 rows in set (0.00 sec)
정리
이처럼 MySQL에서는 배열 변수가 없더라도 임시 테이블을 활용하면 동일한 효과를 낼 수 있습니다. 임시 테이블은 세션(session)이 종료되면 자동으로 삭제되므로, 일회성 데이터 처리나 복잡한 쿼리의 중간 결과 저장 용도로 매우 유용합니다. 특히 if not exists 옵션을 함께 사용하면 같은 이름의 임시 테이블이 이미 존재하는 경우 오류 없이 안전하게 처리할 수 있다는 점도 기억해 두면 좋습니다.