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

MySQL에서 테이블을 복사하는 방법: INSERT INTO SELECT 문 활용하기

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 문을 사용하면 단 한 줄의 쿼리로 테이블 전체 데이터를 복사할 수 있으며, 데이터베이스가 달라도 데이터베이스명.테이블명 형식으로 지정하기만 하면 됩니다. 단, 이 방법은 데이터만 복사하므로 대상 테이블의 구조(컬럼 정의, 인덱스 등)는 미리 동일하게 만들어 두어야 한다는 점을 기억하세요.