MySQL 임시 테이블 및 세션 데이터

MySQLBeginner
지금 연습하기

소개

이 실습에서는 MySQL 에서 임시 테이블 (temporary tables) 을 다루는 방법을 배우고, 단일 세션 내에서의 생성 및 사용에 초점을 맞춥니다. MySQL 서버에 연결하고 temp_employees라는 이름의 임시 테이블을 생성하는 것부터 시작합니다.

실습 전반에 걸쳐 이 테이블에 데이터를 삽입하고, 쿼리를 통해 정보를 검색하며, 다른 세션에서 접근을 시도하여 세션별 범위 (session-specific scope) 를 탐색합니다. 마지막으로 임시 테이블을 명시적으로 제거하는 방법과 자동 정리 프로세스 (automatic cleanup process) 를 이해하게 됩니다. 이 실습을 통해 임시 테이블을 세션별 데이터 조작 (session-specific data manipulation) 에 어떻게 활용할 수 있는지 실질적인 이해를 얻게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 95%의 긍정적인 리뷰율을 받았습니다.

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로 임시 테이블을 명시적으로 제거하는 방법을 배우고 세션이 종료될 때 자동으로 정리된다는 것을 이해했습니다. 임시 테이블은 데이터베이스 워크플로에서 세션별 데이터와 중간 결과를 관리하는 데 유용한 도구입니다.