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

MySQL에서 한 테이블의 모든 행을 다른 테이블로 복사하는 방법

MySQL에서 테이블의 모든 행을 다른 테이블로 복사하는 방법

한 테이블의 전체 데이터를 다른 테이블로 옮기고 싶다면 INSERT INTO ... SELECT 구문을 활용하면 됩니다. 이 방식은 원본 테이블에서 조회한 결과를 그대로 대상 테이블에 삽입해 주기 때문에, 백업 테이블 생성이나 데이터 마이그레이션 작업에 매우 유용합니다.

기본 문법은 다음과 같습니다.

insert into yourTableName2(yourColumnName1,...N)
select yourColumnName1,...N from yourTableName1;

두 테이블의 컬럼 이름이 서로 달라도 데이터 타입만 호환된다면 복사가 가능합니다. 아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

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

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

mysql> create table DemoTable1(FirstName varchar(100));
Query OK, 0 rows affected (1.11 sec)

2단계: 레코드 삽입

insert 명령을 사용해 테이블에 샘플 데이터를 추가합니다.

mysql> insert into DemoTable1 values('John');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1 values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1 values('Bob');
Query OK, 1 row affected (0.40 sec)

3단계: 원본 테이블 데이터 확인

select 문으로 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from DemoTable1;

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

+-----------+
| FirstName |
+-----------+
| John |
| Chris |
| Bob |
+-----------+
3 rows in set (0.00 sec)

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

데이터를 받아올 대상 테이블을 생성합니다. 여기서는 컬럼 이름을 EmployeeName으로 지정했습니다.

mysql> create table DemoTable2(EmployeeName varchar(100));
Query OK, 0 rows affected (0.78 sec)

5단계: 테이블 간 데이터 복사

이제 INSERT INTO ... SELECT 구문으로 첫 번째 테이블의 모든 행을 두 번째 테이블로 복사합니다.

mysql> insert into DemoTable2(EmployeeName) select FirstName from DemoTable1;
Query OK, 3 rows affected (0.52 sec)
Records: 3 Duplicates: 0 Warnings: 0

결과 메시지를 보면 3개의 레코드가 성공적으로 복사되었으며, 중복이나 경고 없이 처리되었음을 확인할 수 있습니다.

6단계: 복사 결과 확인

마지막으로 첫 번째 테이블의 데이터가 제대로 저장되었는지 두 번째 테이블을 조회해 보겠습니다.

mysql> select *from DemoTable2;

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

+--------------+
| EmployeeName |
+--------------+
| John |
| Chris |
| Bob |
+--------------+
3 rows in set (0.00 sec)

첫 번째 테이블(DemoTable1)의 FirstName 값들이 두 번째 테이블(DemoTable2)의 EmployeeName 컬럼에 그대로 복사된 것을 확인할 수 있습니다. 이처럼 INSERT INTO ... SELECT 구문을 사용하면 컬럼 이름이 서로 달라도 손쉽게 테이블 간 데이터를 복사할 수 있으며, WHERE 절을 추가하면 특정 조건에 맞는 행만 선택적으로 복사하는 것도 가능합니다.