본문 바로가기
MySQL

[MySQL] 테이블 복사하는 방법 (DDL, `LIKE`)

by wch_t 2024. 7. 28.

기존 데이터베이스 테이블에 있는 데이터를 활용한 테스트를 진행하고자, 테이블 복사에 대한 방법을 찾아보고 정리했다.

 

 

1. 테이블 구조 복사

기존 테이블의 생성 구문을 확인한다.

SHOW CREATE TABLE existing_table;

 

 

2. 새 테이블 생성

위에서 확인한 생성 구문에서 테이블명만 바꾸고 실행한다.

 

 

3. 데이터 복사

INSERT INTO new_table SELECT * FROM existing_table;

 

 


 

번외.

테이블 복사에 관해 찾아보던 중, 평소 즐겨보던 블로그에서 `LIKE`를 활용한 테이블 구조 복사는 'PK', 'Auto increment'와 같은 설정은 복사할 수 없다는 글을 보게 되었다. "왜 `LIKE`는 위 설정을 복사할 수 없을까?" 하는 물음에 `LIKE`에 대한 MySQL, W3School과 같은 래퍼런스들도 찾아봤지만 정규표현식에 대한 비교 설명만 볼 수 있었다. 따라서 직접 테스트를 진행해보았고, `LIKE`를 통한 테이블 구조 복사 또한 'PK', 'Auto increment'와 같은 설정을 그대로 복사하는 것을 확인할 수 있었다.

 

 

1) 학생 테이블 생성

CREATE TABLE students (
    student_id INT AUTO_INCREMENT PRIMARY KEY,   -- 학생 ID, 기본 키
    name VARCHAR(100) NOT NULL,                  -- 학생 이름
    birth_date DATE NOT NULL,                    -- 생년월일
    phone_number VARCHAR(15),                    -- 전화번호
    email VARCHAR(100) NOT NULL UNIQUE           -- 이메일, 유니크 키
);

 

 

2) dummy 데이터 삽입

INSERT INTO students (name, birth_date, phone_number, email) VALUES
('홍길동', '2000-01-15', '010-1234-5678', 'honggildong@example.com'),
('김영희', '1999-02-22', '010-2345-6789', 'kimyounghee@example.com'),
('이철수', '2001-03-10', '010-3456-7890', 'leechulsoo@example.com'),
('박지민', '2000-04-05', '010-4567-8901', 'parkjimin@example.com'),
('최민수', '1998-05-30', '010-5678-9012', 'choiminsu@example.com'),
('정수빈', '2002-06-18', '010-6789-0123', 'jeongsubin@example.com'),
('한지민', '1997-07-25', '010-7890-1234', 'hanjimin@example.com'),
('김다', '2001-08-14', '010-8901-2345', 'osehun@example.com'),
('임수정', '2000-09-09', '010-9012-3456', 'imsujeong@example.com'),
('배수진', '1999-10-20', '010-0123-4567', 'baesujin@example.com');

 

 

3) 테이블 구조 복사

CREATE TABLE new_students LIKE students;

 

 

4) 데이터 복사

INSERT INTO new_students SELECT * FROM students;

 

students 스키마(좌) / new_students 스키마(우)

 

 


 

참고문헌.

https://javaoop.tistory.com/94

 

https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%B3%B5%EC%82%AC%ED%95%98%EB%8A%94-4%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95-%EC%A0%95%EB%A6%AC

 

https://dev.mysql.com/doc/refman/8.4/en/pattern-matching.html

 

https://www.w3schools.com/mysql/mysql_like.asp