MySQL 준비된 문(Prepared Statement)과 변수 함께 사용하기
MySQL에서는 PREPARE 문을 실행할 때 사용자 정의 변수를 함께 활용할 수 있습니다. 이 방식을 사용하면 테이블 이름이나 조건 등을 동적으로 구성한 후 쿼리를 준비하고 실행할 수 있어 유연성이 크게 향상됩니다.
아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20),
LastName varchar(20)
);
Query OK, 0 rows affected (0.53 sec)2단계: 데이터 삽입
INSERT 명령을 사용하여 테이블에 샘플 레코드를 추가합니다.
mysql> insert into DemoTable(FirstName,LastName) values('John','Smith');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName,LastName) values('David','Miller');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName,LastName) values('John','Doe');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(FirstName,LastName) values('Chris','Brown');
Query OK, 1 row affected (0.15 sec)3단계: 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | John | Smith | | 2 | David | Miller | | 3 | John | Doe | | 4 | Chris | Brown | +----+-----------+----------+ 4 rows in set (0.00 sec)
4단계: 변수와 PREPARE 문 사용
다음은 MySQL에서 PREPARE 문을 사용하면서 변수를 설정하는 핵심 쿼리입니다. 먼저 SET 명령으로 테이블 이름을 담은 변수를 선언하고, CONCAT() 함수로 완전한 쿼리 문자열을 만든 뒤 이를 PREPARE 문에 전달합니다.
mysql> set @yourTableName :='DemoTable';
Query OK, 0 rows affected (0.00 sec)
mysql> set @query :=CONCAT('select `LastName` from ',@yourTableName, ' where Id=3 ');
Query OK, 0 rows affected (0.00 sec)
mysql> prepare myStatement from @query;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> execute myStatement;위 코드의 처리 흐름은 다음과 같습니다.
- @yourTableName: 대상 테이블 이름을 저장하는 사용자 정의 변수입니다.
- @query: CONCAT() 함수로 테이블 이름 변수를 결합하여 동적으로 생성된 SELECT 쿼리 문자열입니다.
- PREPARE: 생성된 쿼리 문자열을 실행 가능한 형태로 준비합니다.
- EXECUTE: 준비된 문을 실제로 실행합니다.
실행 결과는 다음과 같습니다.
+----------+ | LastName | +----------+ | Doe | +----------+ 1 row in set (0.00 sec)
결과를 보면 Id가 3인 레코드의 LastName 값인 'Doe'가 정상적으로 반환되었습니다. 이처럼 변수와 PREPARE 문을 조합하면 쿼리 문자열을 동적으로 구성할 수 있어, 테이블 이름이나 검색 조건이 실행 시점에 결정되는 상황에서 매우 유용하게 활용됩니다.