MySQL 테이블 복사의 기본: INSERT INTO SELECT
MySQL에서 한 테이블의 데이터를 다른 테이블로 복사하려면 INSERT INTO SELECT 문을 사용하면 됩니다. 기본 문법은 다음과 같습니다.
INSERT INTO 데이터베이스명.대상테이블명(SELECT * FROM 데이터베이스명.원본테이블명);
이 문법은 같은 데이터베이스 내에서만 작동하는 것이 아니라, 서로 다른 데이터베이스에 있는 테이블 사이에서도 데이터를 복사할 수 있다는 점이 큰 장점입니다.
1단계: 원본 테이블 생성 및 데이터 입력
먼저 'bothinnodbandmyisam'이라는 데이터베이스에 학생 정보 테이블을 만들어 보겠습니다.
mysql> create table Student_Information
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(10),
-> Age int
-> );
Query OK, 0 rows affected (0.67 sec)
테이블이 생성되었으니 INSERT 명령으로 몇 개의 레코드를 삽입합니다.
mysql> insert into Student_Information(Name,Age) values('Larry',30);
Query OK, 1 row affected (0.20 sec)
mysql> insert into Student_Information(Name,Age) values('Mike',26);
Query OK, 1 row affected (0.19 sec)
mysql> insert into Student_Information(Name,Age) values('Bob',26);
Query OK, 1 row affected (0.12 sec)
mysql> insert into Student_Information(Name,Age) values('Carol',24);
Query OK, 1 row affected (0.15 sec)SELECT 문으로 전체 레코드가 정상적으로 입력되었는지 확인해 보겠습니다.
mysql> select *from Student_Information;
실행 결과는 다음과 같습니다.
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | Larry | 30 |
| 2 | Mike | 26 |
| 3 | Bob | 26 |
| 4 | Carol | 24 |
+----+-------+------+
4 rows in set (0.00 sec)
2단계: 대상 데이터베이스와 테이블 준비
이제 복사할 목적지인 두 번째 데이터베이스 'sample'로 이동합니다.
mysql> use sample;
Database changed
이 데이터베이스 안에 복사된 데이터를 담을 새 테이블을 하나 생성합니다.
mysql> create table Student_Table_sample
-> (
-> StudentId int NOT NULL AUTO_INCREMENT,
-> StudentName varchar(20),
-> StudentAge int ,
-> PRIMARY KEY(StudentId)
-> );
Query OK, 0 rows affected (0.57 sec)
3단계: 테이블 복사 실행
준비가 끝났으면 실제로 테이블을 복사하는 명령을 실행합니다. 원본 데이터베이스 이름과 대상 데이터베이스 이름을 모두 명시한다는 점에 주목하세요.
mysql> insert into sample.Student_Table_sample(select *from bothinnodbandmyisam.Student_Information);
Query OK, 4 rows affected (0.23 sec)
Records: 4 Duplicates: 0 Warnings: 0
결과 메시지에서 4개의 레코드가 처리(affected)되었다고 표시됩니다. 이는 테이블이 성공적으로 복사되었음을 의미합니다.
4단계: 복사 결과 확인
마지막으로 두 번째 테이블 'Student_Table_sample'의 전체 레코드를 조회하여 복사가 제대로 이루어졌는지 확인합니다.
mysql> select *from Student_Table_sample;
다른 데이터베이스에 있는 테이블에서 조회된 결과는 다음과 같습니다.
+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
| 1 | Larry | 30 |
| 2 | Mike | 26 |
| 3 | Bob | 26 |
| 4 | Carol | 24 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)
정리
INSERT INTO SELECT 문을 사용하면 단 한 줄의 쿼리로 테이블 전체 데이터를 복사할 수 있으며, 데이터베이스가 달라도 데이터베이스명.테이블명 형식으로 지정하기만 하면 됩니다. 단, 이 방법은 데이터만 복사하므로 대상 테이블의 구조(컬럼 정의, 인덱스 등)는 미리 동일하게 만들어 두어야 한다는 점을 기억하세요.