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

MySQL에서 데이터, 트리거, 인덱스까지 테이블을 완벽하게 복제하는 방법

MySQL에서 기존 테이블과 동일한 구조를 가진 새 테이블을 만들고, 여기에 데이터뿐만 아니라 트리거와 인덱스까지 함께 복제하려면 다음 두 개의 쿼리를 실행하면 됩니다.

CREATE TABLE new_table LIKE old_table;
INSERT new_table SELECT * from old_table;

첫 번째 쿼리는 원본 테이블의 구조(컬럼 정의, 인덱스, 트리거 등)를 그대로 복사하여 새 테이블을 생성하고, 두 번째 쿼리는 원본 테이블의 모든 데이터를 새 테이블로 삽입합니다.

실전 예제

1단계: 원본 테이블 생성 및 데이터 입력

먼저 예제로 사용할 employee 테이블을 생성하고 샘플 데이터를 입력해 보겠습니다.

mysql> Create table employee(ID INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME VARCHAR(20));
Query OK, 0 rows affected (0.21 sec)

mysql> Describe employee;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.07 sec)

mysql> Insert into employee(name) values('Gaurav'),('Raman');
Query OK, 2 rows affected (0.07 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> Select * from employee;
+----+--------+
| ID | NAME |
+----+--------+
| 1 | Gaurav |
| 2 | Raman |
+----+--------+
2 rows in set (0.00 sec)

2단계: CREATE TABLE ~ LIKE로 테이블 구조 복제

아래 쿼리는 employee 테이블과 동일한 구조를 가진 employee1 테이블을 생성합니다. 이렇게 하면 컬럼 정의와 함께 기본 키(PRIMARY KEY), auto_increment 속성 같은 인덱스 정보도 그대로 복사됩니다. DESCRIBE 명령으로 확인할 수 있습니다.

mysql> create table employee1 like employee;
Query OK, 0 rows affected (0.19 sec)

mysql> describe employee1;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.14 sec)

3단계: INSERT ~ SELECT로 데이터 복사

이제 아래 쿼리를 실행하면 employee 테이블의 데이터가 그대로 employee1 테이블에 삽입됩니다.

mysql> INSERT INTO employee1 select * from employee;
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from employee1;
+----+--------+
| ID | NAME |
+----+--------+
| 1 | Gaurav |
| 2 | Raman |
+----+--------+
2 rows in set (0.00 sec)

정리

이처럼 CREATE TABLE ... LIKE 문과 INSERT INTO ... SELECT 문을 조합하면 원본 테이블의 구조, 데이터, 트리거, 인덱스까지 모두 포함된 완벽한 테이블 복제본을 손쉽게 만들 수 있습니다. 테이블 백업이나 테스트 환경 구축 시 매우 유용하게 활용할 수 있는 방법입니다.