DataBase

[Oracle] 테이블 복사/ 테이블의 데이터 복사

Da-ryu 2022. 5. 19. 19:00

 프로젝트를 진행하면서 테이블의 구조 변경을 하거나 기능 테스트 중 원하지 않게 데이터가 변경되는 경우가 있다. 많지 않은 데이터라도 하나하나 다시 추가하거나 변경하는 것이 번거롭기 때문에 테이블을 복사해서 데이터를 백업해두면 편하다. 복사해둔 테이블로부터 데이터를 다시 복사하여 데이터를 복구할 수 있기 때문이다.


테이블 복사

- 기존 테이블과 똑같은 새로운 테이블 만들기

CREATE TABLE 새로 만들 테이블명(복사본) AS SELECT * FROM 복사할 테이블명(원본);

AS 키워드를 사용해서 원본 테이블의 구조와 데이터까지 모두 똑같은 복사본을 만들 수 있다. 다만 NOT NULL을 제외한 제약조건은 복사되지 않는다.

- 기존 테이블의 구조만 같은 새로운 테이블 만들기

CREATE TABLE 새로 만들 테이블명 AS SELECT * FROM 복사할 테이블명 WHERE 1 = 2;

조건이 거짓인 WHERE절을 덧붙이면 데이터 복사 없이 기존 테이블과 구조만 같은 새로운 테이블이 만들어진다.


데이터 복사

A 테이블의 데이터를 B 테이블에 복사하고 싶을 때,

- A 테이블과 B 테이블의 구조가 같을 경우

INSERT INTO B 테이블 SELECT * FROM A 테이블;

위의 쿼리문을 사용하면 모든 A 테이블의 모든 데이터가 B 테이블에 추가된다. 뒤에 WHERE절을 덧붙여서 원하는 데이터만 추출하여 넣을 수도 있다.

- A 테이블과 B 테이블의 구조가 다른 경우

INSERT INTO B 테이블((B 테이블의)컬럼1, 컬럼2, ...)
SELECT (A 테이블의)컬럼1, 컬럼2, ... FROM A 테이블;

예로 MEMBER 테이블의 ID, NAME 컬럼의 데이터를 USER 테이블의 USER_ID, USER_NAME 컬럼에 복사하고 싶다면 아래와 같다.

INSERT INTO USER(USER_ID, USER_NAME) SELECT ID, NAME FROM MEMBER;

마찬가지로 뒤에 WHERE절을 덧붙여서 원하는 데이터만 삽입 가능하다.