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

MySQL PREPARE 문에서 테이블 이름을 사용자 정의 변수로 설정하는 방법

MySQL의 PREPARE(준비된 문)에서는 테이블 이름을 직접 파라미터로 전달할 수 없습니다. 하지만 사용자 정의 변수와 CONCAT() 함수를 활용하면 동적으로 테이블 이름을 지정한 쿼리를 준비하고 실행할 수 있습니다. 이 글에서는 그 과정을 단계별로 살펴보겠습니다.

1. 샘플 테이블 생성

먼저 테스트용 테이블을 생성합니다.

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(20)
);
Query OK, 0 rows affected (0.71 sec)

2. 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable(StudentName) values('Chris');
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable(StudentName) values('David');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable(StudentName) values('Sam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | Chris       |
|         2 | David       |
|         3 | Sam         |
|         4 | Mike        |
+-----------+-------------+
4 rows in set (0.00 sec)

4. 사용자 정의 변수로 테이블 이름 지정하기

이제 핵심 부분입니다. 사용자 정의 변수에 테이블 이름을 담고, CONCAT()으로 완전한 SELECT 쿼리 문자열을 만든 뒤 이를 PREPARE 문으로 준비하고 EXECUTE로 실행합니다.

mysql> set @tableName = 'DemoTable';
Query OK, 0 rows affected (0.04 sec)
mysql> set @queryToSelectStudentName := concat('select StudentName from ',@tableName);
Query OK, 0 rows affected (0.28 sec)
mysql> prepare executeQuery from @queryToSelectStudentName;
Query OK, 0 rows affected (0.04 sec)
Statement prepared
mysql> execute executeQuery;

실행 결과는 다음과 같습니다.

+-------------+
| StudentName |
+-------------+
| Chris       |
| David       |
| Sam         |
| Mike        |
+-------------+
4 rows in set (0.00 sec)

동작 원리 정리

SET 명령으로 테이블 이름을 사용자 정의 변수(@tableName)에 저장한 후, CONCAT() 함수를 이용해 해당 변수를 쿼리 문자열에 연결합니다. 완성된 쿼리 문자열은 PREPARE 문으로 준비되고, EXECUTE 문으로 실제 실행됩니다. 이 방식을 사용하면 PREPARE 문에서도 테이블 이름처럼 일반적으로 파라미터 바인딩이 불가능한 식별자를 동적으로 처리할 수 있습니다.