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

MySQL에서 기존 테이블 구조를 복사해 새 테이블 생성하는 방법(CREATE TABLE ... LIKE)

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 방식을 사용하는 것이 좋습니다.