MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하는 작업은 INSERT INTO ... SELECT 구문 하나면 간단하게 처리할 수 있습니다. 이번 글에서는 실제 예제를 통해 두 개의 테이블을 만들고, 첫 번째 테이블의 데이터를 두 번째 테이블로 복사하는 전체 과정을 단계별로 살펴보겠습니다.
1단계: 첫 번째 테이블 생성하기
먼저 데이터를 담을 원본 테이블을 생성합니다.
mysql> CREATE table FirstTable -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.61 sec)
2단계: 원본 테이블에 데이터 삽입하기
테이블 생성이 완료되면 복사할 샘플 레코드를 입력합니다.
mysql> INSERT into FirstTable values(1,'john'); Query OK, 1 row affected (0.20 sec) mysql> INSERT into FirstTable values(2,'Smith'); Query OK, 1 row affected (0.21 sec)
3단계: 데이터 확인하기
SELECT 문으로 저장된 레코드를 조회해 보겠습니다.
mysql> SELECT * From FirstTable;
실행 결과는 다음과 같습니다.
+------+-------+ | id | name | +------+-------+ | 1 | john | | 2 | Smith | +------+-------+ 2 rows in set (0.00 sec)
4단계: 두 번째 테이블 생성하기
이제 데이터를 복사해 넣을 대상 테이블을 만듭니다. 원본 테이블과 동일한 구조로 생성하는 것이 좋습니다.
mysql> CREATE table SecondTable -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.69 sec)
5단계: INSERT INTO ... SELECT로 데이터 복사하기
핵심은 바로 이 부분입니다. INSERT INTO 문 안에 SELECT 문을 조합하면 원본 테이블의 모든 데이터를 한 번의 쿼리로 새 테이블에 복사할 수 있습니다.
mysql> INSERT INTO SecondTable (id,name) -> select id,name from FirstTable; Query OK, 2 rows affected (0.17 sec) Records: 2 Duplicates: 0 Warnings: 0
실행 결과를 보면 2개의 레코드가 성공적으로 복사되었음을 확인할 수 있습니다.
6단계: 복사 결과 검증하기
마지막으로 SELECT 문을 사용해 SecondTable의 내용을 조회하여 데이터가 제대로 복사되었는지 확인합니다.
mysql> SELECT * from SecondTable;
실행 결과는 다음과 같습니다.
+------+-------+ | id | name | +------+-------+ | 1 | john | | 2 | Smith | +------+-------+ 2 rows in set (0.00 sec)
정리 및 추가 팁
지금까지 살펴본 것처럼 MySQL에서 테이블 간 데이터 복사는 INSERT INTO 대상테이블 (컬럼목록) SELECT 컬럼목록 FROM 원본테이블 형태의 쿼리로 손쉽게 수행할 수 있습니다.
몇 가지 유용한 활용 방법도 알아두면 좋습니다.
- 조건부 복사: SELECT 문에 WHERE 절을 추가하면 특정 조건에 맞는 데이터만 복사할 수 있습니다. 예:
SELECT * FROM FirstTable WHERE id > 1 - 테이블 구조까지 함께 복사:
CREATE TABLE SecondTable AS SELECT * FROM FirstTable를 사용하면 테이블 생성과 데이터 복사를 한 번에 처리할 수 있습니다. 단, 인덱스와 기본 키 등은 복사되지 않으므로 필요하다면 별도로 추가해야 합니다. - 전체 컬럼 복사: 컬럼 목록 대신
INSERT INTO SecondTable SELECT * FROM FirstTable처럼 작성하면 모든 컬럼의 데이터를 복사할 수 있습니다. 이 경우 두 테이블의 컬럼 순서와 개수가 일치해야 합니다.
대용량 테이블을 복사할 때는 트랜잭션 처리와 잠금(lock) 상황을 고려하고, 운영 환경이라면 반드시 백업 후 작업하는 것이 안전합니다.