[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 기존_테이블명;
* 필요한 컬럼만 선택하여 새로운 테이블 생성 가능
제약 조건, 인덱스는 복사되지 않음
'DEV' 카테고리의 다른 글
[MySQL] 버전, 시스템정보 확인하기 (0) | 2024.04.30 |
---|---|
[javascript] cookie 다루기 : 확인, 등록, 삭제 예제 (0) | 2024.04.11 |
[JAVA] request.getParameter() 파라미터 모두 읽어오기 (0) | 2024.03.21 |
[Linux] 파일, 디렉토리 복사하기 cp 옵션 예제 (0) | 2023.12.14 |
[ORACLE] 함수 SUM, MAX, MIN, AVG, COUNT, SUBSTR, TO_DATE, TO_CHAR, NVL, DECODE 간단 설명 및 예제 (0) | 2023.11.13 |