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

MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하는 방법 – INSERT INTO SELECT 완벽 가이드

MySQL에서 한 테이블에 저장된 데이터를 그대로 다른 테이블로 옮기고 싶다면 INSERT INTO ... SELECT 문을 사용하면 됩니다. 이 문법은 SELECT 쿼리로 조회한 결과를 별도의 중간 과정 없이 곧바로 다른 테이블에 삽입해 주기 때문에, 데이터 백업이나 테이블 간 데이터 이관 작업에서 매우 유용하게 활용됩니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1단계: 첫 번째 테이블 생성하기

먼저 원본 데이터가 담길 테이블을 생성합니다.

mysql> create table DemoTabe1 (Marks int);
Query OK, 0 rows affected (0.66 sec)

2단계: 첫 번째 테이블에 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTabe1 values(68);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTabe1 values(89);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTabe1 values(99);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTabe1 values(39);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTabe1 values(49);
Query OK, 1 row affected (0.12 sec)

3단계: 첫 번째 테이블의 데이터 확인하기

SELECT 문으로 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTabe1;

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

+-------+
| Marks |
+-------+
| 68    |
| 89    |
| 99    |
| 39    |
| 49    |
+-------+
5 rows in set (0.00 sec)

4단계: 두 번째 테이블 생성하기

데이터를 복사해 넣을 대상 테이블을 새로 만듭니다. 컬럼 이름은 달라도 되지만, 데이터 타입은 호환되어야 합니다.

mysql> create table DemoTabe2 (Score int);
Query OK, 0 rows affected (0.66 sec)

5단계: INSERT INTO ... SELECT로 데이터 복사하기

이제 핵심인 INSERT INTO ... SELECT 문을 사용해 첫 번째 테이블의 데이터를 두 번째 테이블로 복사합니다.

mysql> insert into DemoTabe2(Score) select Marks from DemoTabe1;
Query OK, 5 rows affected (0.16 sec)
Records: 5 Duplicates: 0 Warnings: 0

위 쿼리는 DemoTabe1의 Marks 컬럼 값을 조회하여 DemoTabe2의 Score 컬럼에 그대로 삽입하는 역할을 합니다. 실행 결과 5개의 레코드가 성공적으로 복사된 것을 확인할 수 있습니다.

6단계: 복사 결과 검증하기

두 번째 테이블을 조회해 데이터가 제대로 들어갔는지 확인합니다.

mysql> select *from DemoTabe2;

실행 결과, 첫 번째 테이블과 동일한 데이터가 두 번째 테이블에도 정상적으로 저장된 것을 볼 수 있습니다.

+-------+
| Score |
+-------+
| 68    |
| 89    |
| 99    |
| 39    |
| 49    |
+-------+
5 rows in set (0.00 sec)

정리 및 참고 사항

INSERT INTO ... SELECT 문은 다음과 같은 상황에서 특히 유용합니다.

- 테이블 백업: 기존 테이블의 데이터를 백업용 테이블로 손쉽게 복사할 수 있습니다.
- 데이터 이관: 스키마 구조가 비슷한 테이블 간에 데이터를 이동할 때 활용됩니다.
- 조건부 복사: WHERE 절을 함께 사용하면 특정 조건에 맞는 데이터만 선택적으로 복사할 수도 있습니다.

단, 복사 대상 테이블의 컬럼 개수와 데이터 타입이 SELECT 문의 결과와 일치하거나 호환되어야 하며, NOT NULL 제약 조건이나 기본 키 충돌 여부도 사전에 확인하는 것이 좋습니다.