본문 바로가기
DEV

[ORACLE/MySQL] Table 그대로 복사하기

by 아노앤유노 2025. 2. 19.
반응형

 

[ORACLE/MySQL] Table 그대로 복사하기 

 

오랜만에 글쓰네요!

 

테스트 하다가 꿀팁이 생겨서 끄적입니다.

 

테이블 백업용도로 복사하여 똑같은 테이블 만들기

 

[ORACLE]

 

1. 테이블 구조 및 데이터 함께 복사 (CREATE TABLE AS SELECT)

CREATE TABLE 새로운_테이블명 AS
SELECT * FROM 기존_테이블명;

* 제약 조건(Primary Key, Unique, Default, Check 등)과 인덱스는 복사되지 않음

 

 

2. 테이블 구조만 복사 (데이터 없이)

CREATE TABLE 새로운_테이블명 AS
SELECT * FROM 기존_테이블명 WHERE 1=0;

* 데이터 및 제약 조건, 인덱스는 복사되지 않음

 

 

3. 테이블을 완전히 동일하게 복사 (제약 조건 및 인덱스 포함)

SET LONG 10000;
SELECT DBMS_METADATA.GET_DDL('TABLE', '기존_테이블명') FROM DUAL;

 

*위 명령어를 실행하면 테이블 생성 SQL 스크립트가 출력됨

 결과를 복사하여 테이블명을 변경한 후 실행하면 완전히 동일한 테이블을 생성 가능

 

 

 

[MySQL]

 

1. 테이블 구조와 데이터 함께 복사 (CREATE TABLE ... AS SELECT) 

CREATE TABLE 새로운_테이블명 AS 
SELECT * FROM 기존_테이블명 WHERE 1=0;

 

*  PRIMARY KEY, AUTO_INCREMENT, INDEX 등은 복사되지 않음

   제약 조건을 유지하려면 수동으로 추가해야 함

 

 

2. 테이블 구조만 복사 (데이터 없이)

CREATE TABLE 새로운_테이블명 AS 
SELECT * FROM 기존_테이블명 WHERE 1=0;

* 제약 조건, AUTO_INCREMENT 속성, 인덱스는 복사되지 않음

  AUTO_INCREMENT 값을 유지하려면 수동으로 설정해야 함

 

 

3-1. 테이블 구조 복사 (SHOW CREATE TABLE 이용)

SHOW CREATE TABLE 기존_테이블명;

* 실행하면 테이블 생성 SQL 스크립트가 출력되며, 복사하여 테이블명을 변경한 후 실행하면 동일한 구조의 테이블 생성 가능

 

 

3-2. 복사한 테이블에 데이터 삽입

INSERT INTO 새로운_테이블명 
SELECT * FROM 기존_테이블명;

* 기존 테이블의 구조 + 인덱스 + 제약 조건을 완전히 동일하게 복사 가능

  데이터는 INSERT INTO ... SELECT로 별도로 복사해야 함

 

 

4. AUTO_INCREMENT 속성 유지하며 복사

     AUTO_INCREMENT가 있는 테이블을 복사할 때는 SHOW CREATE TABLE로 구조를 복사하고, INSERT로 데이터 추가하는 것이 가장 확실함.

SHOW CREATE TABLE 기존_테이블명;

* 출력된 테이블 생성 SQL을 수정하여 새로운 테이블을 생성

INSERT INTO 새로운_테이블명 
SELECT * FROM 기존_테이블명;

* 데이터 삽입

ALTER TABLE 새로운_테이블명 AUTO_INCREMENT = 기존값;

* AUTO_INCREMENT 값 다시 설정

 

 

5. 특정 컬럼만 선택하여 복사

CREATE TABLE 새로운_테이블명 AS 
SELECT 컬럼1, 컬럼2 FROM 기존_테이블명;

* 필요한 컬럼만 선택하여 새로운 테이블 생성 가능

  제약 조건, 인덱스는 복사되지 않음

반응형