MySQL에서 기존 테이블을 복사해 새 테이블 생성하기
MySQL에서는 CREATE TABLE ... LIKE 문법을 사용하면 기존 테이블의 구조를 그대로 복제한 새 테이블을 간단하게 만들 수 있습니다. 컬럼 정의, 데이터 타입, PRIMARY KEY, 인덱스까지 모두 동일하게 복사되므로 백업용 테이블이나 테스트용 테이블을 만들 때 매우 유용합니다.
1. 기본 문법
CREATE TABLE 새_테이블_이름 LIKE 기존_테이블_이름;
LIKE 키워드 뒤에 원본 테이블 이름을 지정하면 해당 테이블과 완전히 같은 구조의 빈 테이블이 생성됩니다. 단, 이 방법은 구조만 복사할 뿐 원본 테이블의 데이터는 복사되지 않는다는 점에 유의하세요.
2. 예제용 원본 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다. 아래 쿼리는 학생 정보를 저장하는 테이블을 생성합니다.
mysql> create table ShowCreateTableCommand
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> FirstName varchar(20),
-> LastName varchar(20),
-> Age int,
-> TotalMarks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.22 sec)3. DESC 명령으로 테이블 구조 확인
DESC 명령어를 사용하면 테이블의 컬럼 구성을 한눈에 확인할 수 있습니다.
mysql> desc ShowCreateTableCommand;
실행 결과는 다음과 같습니다.
+------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | FirstName | varchar(20) | YES | | NULL | | | LastName | varchar(20) | YES | | NULL | | | Age | int(11) | YES | | NULL | | | TotalMarks | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+----------------+ 5 rows in set (0.11 sec)
4. SHOW CREATE TABLE로 실제 DDL 확인
\G 옵션과 함께 SHOW CREATE TABLE 문을 실행하면 MySQL이 내부적으로 사용하는 실제 테이블 생성문(DDL)을 확인할 수 있습니다.
mysql> show create table ShowCreateTableCommand\G
실행 결과:
*************************** 1. row ***************************
Table: ShowCreateTableCommand
Create Table: CREATE TABLE `showcreatetablecommand` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(20) DEFAULT NULL,
`LastName` varchar(20) DEFAULT NULL,
`Age` int(11) DEFAULT NULL,
`TotalMarks` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
1 row in set (0.00 sec)5. LIKE를 사용해 기존 테이블에서 새 테이블 생성
이제 CREATE TABLE ... LIKE 문법으로 기존 테이블을 복사한 새 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE StudentInformationDemo LIKE ShowCreateTableCommand; Query OK, 0 rows affected (0.49 sec)
6. 새 테이블 구조 검증
새로 생성된 테이블의 구조가 원본과 일치하는지 SHOW CREATE TABLE로 확인해 보겠습니다.
mysql> show create table StudentInformationDemo\G
실행 결과:
*************************** 1. row ***************************
Table: StudentInformationDemo
Create Table: CREATE TABLE `studentinformationdemo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(20) DEFAULT NULL,
`LastName` varchar(20) DEFAULT NULL,
`Age` int(11) DEFAULT NULL,
`TotalMarks` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
1 row in set (0.00 sec)출력 결과를 보면 AUTO_INCREMENT가 설정된 PRIMARY KEY를 포함해 스토리지 엔진(InnoDB), 문자셋(utf8mb4), 콜레이션까지 원본 테이블과 완전히 동일한 것을 확인할 수 있습니다.
참고: 구조만 복사 vs 데이터까지 복사
만약 원본 테이블의 데이터까지 함께 복사하고 싶다면 CREATE TABLE ... AS SELECT 문을 사용할 수 있습니다.
CREATE TABLE 새_테이블_이름 AS SELECT * FROM 기존_테이블_이름;
다만 이 방식은 인덱스나 PRIMARY KEY 같은 제약 조건은 복사되지 않으므로, 구조와 제약 조건을 그대로 유지하려면 LIKE 방식을 사용하는 것이 좋습니다.