MySQL에서 한 데이터베이스(스키마)의 테이블에 있는 데이터를 다른 데이터베이스의 테이블로 옮기려면 INSERT INTO ... SELECT 구문을 사용하면 됩니다. 이때 테이블 이름 앞에 데이터베이스 이름을 붙여주는 것이 핵심입니다.
기본 문법
두 개의 데이터베이스 'yourDatabaseName1'과 'yourDatabaseName2'가 있다고 가정했을 때, 기본적인 문법은 다음과 같습니다.
insert into yourDatabaseName2.yourTableName2 select * from yourDatabaseName1.yourTableName1;
예제로 살펴보기
실제 동작 과정을 이해하기 위해 예제 테이블을 만들어 보겠습니다. 먼저 'web' 데이터베이스에 테이블을 생성합니다.
mysql> create table DemoTable2020
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.67 sec)원본 테이블에 데이터 입력
insert 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable2020 values(101,'Chris'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable2020 values(102,'David'); Query OK, 1 row affected (0.25 sec) mysql> insert into DemoTable2020 values(103,'Mike'); Query OK, 1 row affected (0.11 sec)
select 문으로 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from DemoTable2020;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 101 | Chris | | 102 | David | | 103 | Mike | +------+-------+ 3 rows in set (0.00 sec)
다른 데이터베이스에 대상 테이블 생성
이번에는 또 다른 데이터베이스인 'test'에 두 번째 테이블을 생성합니다.
mysql> use test;
Database changed
mysql> create table DemoTable2021
-> (
-> StudentId int,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (0.60 sec)스키마 간 데이터 삽입 실행
이제 'web' 데이터베이스의 DemoTable2020에 있는 데이터를 'test' 데이터베이스의 DemoTable2021로 삽입하는 쿼리입니다. 데이터베이스 이름을 접두사로 붙여 테이블을 지정한다는 점에 주목하세요.
mysql> insert into test.DemoTable2021 select *from web.DemoTable2020; Query OK, 3 rows affected (0.18 sec) Records: 3 Duplicates: 0 Warnings: 0
총 3개의 레코드가 성공적으로 복사되었습니다. select 문으로 결과를 확인해 보겠습니다.
mysql> select *from DemoTable2021;
실행 결과는 다음과 같습니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 101 | Chris | | 102 | David | | 103 | Mike | +-----------+-------------+ 3 rows in set (0.00 sec)
정리 및 참고 사항
이처럼 INSERT INTO 대상DB.대상테이블 SELECT * FROM 원본DB.원본테이블 형태로 작성하면 두 스키마 간에 손쉽게 데이터를 복사할 수 있습니다. 다만 이 방법은 두 테이블의 컬럼 수와 순서가 일치해야 하며, 특정 컬럼만 선택적으로 옮기고 싶다면 SELECT 절에 원하는 컬럼을 명시하고 INSERT 절에도 해당 컬럼 목록을 지정하면 됩니다. 또한 WHERE 조건을 추가하면 일부 데이터만 필터링해서 삽입하는 것도 가능합니다.