소개
이 실습에서는 MySQL 에서 임시 테이블 (temporary tables) 을 다루는 방법을 배우고, 단일 세션 내에서의 생성 및 사용에 초점을 맞춥니다. MySQL 서버에 연결하고 temp_employees라는 이름의 임시 테이블을 생성하는 것부터 시작합니다.
실습 전반에 걸쳐 이 테이블에 데이터를 삽입하고, 쿼리를 통해 정보를 검색하며, 다른 세션에서 접근을 시도하여 세션별 범위 (session-specific scope) 를 탐색합니다. 마지막으로 임시 테이블을 명시적으로 제거하는 방법과 자동 정리 프로세스 (automatic cleanup process) 를 이해하게 됩니다. 이 실습을 통해 임시 테이블을 세션별 데이터 조작 (session-specific data manipulation) 에 어떻게 활용할 수 있는지 실질적인 이해를 얻게 될 것입니다.
MySQL 에 연결하고 임시 테이블 생성하기
이 단계에서는 MySQL 서버에 연결하고 첫 번째 임시 테이블을 생성합니다. 임시 테이블은 단일 클라이언트 세션의 지속 시간 동안만 존재하는 특별한 테이블입니다. 세션이 종료되면 자동으로 삭제되므로 중간 결과나 짧은 시간 동안만 필요한 데이터를 저장하는 데 유용합니다.
먼저 LabEx VM 에서 터미널을 엽니다. 다음 명령을 사용하여 root 사용자로 MySQL 서버에 연결합니다.
sudo mysql -u root
명령을 실행한 후 mysql>과 같은 MySQL 프롬프트가 표시되어야 합니다. 이는 MySQL 서버에 성공적으로 연결되었으며 이제 SQL 명령을 실행할 수 있음을 나타냅니다.
테이블을 생성하기 전에 데이터베이스를 선택해야 합니다. 테스트를 위해 기본적으로 제공되는 test 데이터베이스를 사용합니다. 존재하지 않는 경우 다음 명령이 생성합니다.
CREATE DATABASE IF NOT EXISTS test;
USE test;
다음으로 temp_employees라는 임시 테이블을 생성합니다. 구문은 일반 테이블 생성과 유사하지만 TEMPORARY 키워드를 포함해야 합니다.
mysql> 프롬프트에서 다음 SQL 명령을 실행합니다.
CREATE TEMPORARY TABLE temp_employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
department VARCHAR(255)
);
이 명령은 세 개의 열을 가진 임시 테이블을 생성합니다.
id: 기본 키 역할을 하며 새 행마다 자동으로 증가하는 정수입니다.name: 직원의 이름을 저장하는 문자열 (최대 255 자) 입니다.department: 직원의 부서를 저장하는 문자열 (최대 255 자) 입니다.
현재 세션 내에서 임시 테이블이 성공적으로 생성되었는지 확인하려면 DESCRIBE 명령을 사용합니다.
DESCRIBE temp_employees;
출력은 temp_employees 테이블의 구조를 표시하여 열과 데이터 유형을 확인합니다.
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| department | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
이 출력은 temp_employees 테이블이 현재 MySQL 세션에서 사용할 준비가 되었음을 확인합니다.
임시 테이블에 데이터 삽입 및 쿼리
temp_employees 테이블을 생성했으므로 이제 일반 테이블처럼 상호 작용할 수 있습니다. 이 단계에서는 데이터를 삽입한 다음 해당 데이터를 조회합니다.
이전 단계의 MySQL 세션에 여전히 있어야 하며 mysql> 프롬프트가 표시됩니다.
INSERT INTO 문을 사용하여 temp_employees 테이블에 몇 개의 데이터 행을 삽입해 보겠습니다. 이 명령들을 하나씩 실행합니다.
INSERT INTO temp_employees (name, department) VALUES ('Alice Smith', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Bob Johnson', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Charlie Brown', 'IT');
이 명령들은 임시 테이블에 세 개의 직원 레코드를 추가합니다.
방금 삽입한 데이터를 보려면 SELECT 문을 사용합니다. 별표 (*) 는 "모든 열"을 의미하는 와일드카드입니다.
SELECT * FROM temp_employees;
이 명령은 temp_employees 테이블에서 모든 열과 행을 검색합니다. 출력에는 삽입한 데이터가 표시되어야 합니다.
+----+---------------+------------+
| id | name | department |
+----+---------------+------------+
| 1 | Alice Smith | Sales |
| 2 | Bob Johnson | Marketing |
| 3 | Charlie Brown | IT |
+----+---------------+------------+
3 rows in set (0.00 sec)
WHERE 절을 사용하여 결과를 필터링할 수도 있습니다. 예를 들어 'IT' 부서의 직원만 찾으려면 다음 쿼리를 실행합니다.
SELECT name FROM temp_employees WHERE department = 'IT';
출력에는 조건과 일치하는 직원의 이름만 표시됩니다.
+---------------+
| name |
+---------------+
| Charlie Brown |
+---------------+
1 row in set (0.00 sec)
이는 표준 데이터 조작 및 쿼리 작업이 임시 테이블에서 예상대로 작동함을 보여줍니다.
임시 테이블 범위 이해하기
임시 테이블의 주요 특징은 세션별 범위입니다. 이는 한 MySQL 세션에서 생성된 임시 테이블은 두 세션 모두 동일한 데이터베이스에 연결되어 있더라도 다른 세션에서는 보거나 액세스할 수 없다는 것을 의미합니다. 이 단계에서는 이 동작을 시연합니다.
첫 번째 터미널 창에서 현재 MySQL 세션을 열어 둡니다.
이제 새 터미널 창을 엽니다. 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 "여기에 터미널 열기"를 선택하여 이 작업을 수행할 수 있습니다.
이 새 터미널에서 MySQL 서버에 다시 연결합니다. 이렇게 하면 두 번째 독립적인 세션이 생성됩니다.
sudo mysql -u root
명령을 실행한 후 mysql>과 같은 MySQL 프롬프트가 표시되어야 합니다. 이는 MySQL 서버에 성공적으로 연결되었으며 이제 SQL 명령을 실행할 수 있음을 나타냅니다.
다음으로 test 데이터베이스를 선택합니다.
USE test;
이제 두 개의 별도 터미널이 있으며 각각 자체 MySQL 세션이 있습니다. 이 새 세션에서 첫 번째 세션에서 생성한 temp_employees 테이블을 쿼리해 봅니다.
SELECT * FROM temp_employees;
이 세션은 다른 세션에서 생성된 임시 테이블에 대한 정보가 없기 때문에 오류 메시지가 표시됩니다.
ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist
이 오류는 temp_employees 테이블이 생성된 세션에 격리되어 있음을 확인합니다. 테이블을 설명하려고 시도할 수도 있으며, 동일한 오류가 발생합니다.
DESCRIBE temp_employees;
ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist
이 동작은 임시 테이블이 작동하는 방식의 기본이며, 다른 사용자나 프로세스와 간섭하지 않고 임시 데이터를 안전하게 저장할 수 있게 하는 요소입니다.
이제 이 새 터미널 창을 닫고 원래 터미널로 돌아갈 수 있습니다.
임시 테이블 삭제 및 세션 종료
임시 테이블은 MySQL 세션이 종료될 때 자동으로 삭제됩니다. 하지만 DROP TEMPORARY TABLE 문을 사용하여 명시적으로 삭제할 수도 있습니다. 세션이 종료되기 전에 테이블 사용이 완료되었다면 리소스를 확보하므로 명시적으로 삭제하는 것이 좋습니다.
temp_employees 테이블이 있는 원래 터미널 창으로 돌아가야 합니다.
임시 테이블을 명시적으로 삭제하려면 mysql> 프롬프트에서 다음 명령을 사용합니다.
DROP TEMPORARY TABLE temp_employees;
성공적으로 삭제되면 Query OK 메시지가 표시됩니다. 테이블이 제거되었는지 확인하려면 다시 쿼리해 봅니다.
SELECT * FROM temp_employees;
이제 "Table doesn't exist" 오류가 표시되어 이 세션에서 테이블을 더 이상 사용할 수 없음을 확인해야 합니다.
ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist
마지막으로 MySQL 세션을 종료하려면 exit를 입력하고 Enter 키를 누릅니다.
exit
이렇게 하면 MySQL 서버 연결이 종료되고 일반 터미널 프롬프트로 돌아갑니다. 임시 테이블을 명시적으로 삭제하지 않았다면 이 시점에서 자동으로 제거되었을 것입니다.
요약
이 실습에서는 MySQL 에서 임시 테이블을 작업하는 기본 사항을 배웠습니다. MySQL 서버에 성공적으로 연결하고, CREATE TEMPORARY TABLE를 사용하여 임시 테이블을 생성하고, INSERT INTO를 사용하여 데이터를 채웠습니다. 그런 다음 SELECT 쿼리로 이 데이터를 검색하는 연습을 했습니다.
중요하게도, 다른 세션에서는 보이지 않는다는 것을 시연함으로써 임시 테이블의 세션별 범위를 탐구했습니다. 마지막으로 DROP TEMPORARY TABLE로 임시 테이블을 명시적으로 제거하는 방법을 배우고 세션이 종료될 때 자동으로 정리된다는 것을 이해했습니다. 임시 테이블은 데이터베이스 워크플로에서 세션별 데이터와 중간 결과를 관리하는 데 유용한 도구입니다.



