Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL PREPARE 문에서 변수를 활용하는 방법

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 문을 조합하면 쿼리 문자열을 동적으로 구성할 수 있어, 테이블 이름이나 검색 조건이 실행 시점에 결정되는 상황에서 매우 유용하게 활용됩니다.