테이블 관리 (3)
1. 테이블 제거
1-1. 개념
존재하는 테이블을 제거할 수 있다. 하지반 테이블 제거 시는 항상 주의해야하고 FK (Foreign Key) 관계도 유의해야 한다.
1-2. 테이블 제거 문법
1 | DROP TABLE TABLE_NAME |
1-3. 테이블 제거 실습
>> 실습 준비
1 | CREATE TABLE DIRECTOR |
1 | INSERT INTO DIRECTOR |
1 | SELECT * FROM DIRECTOR; |
1 | SELECT * FROM FILMS; |
>> 테이블 제거 실습
[MISSION 1] 부모 테이블 (DIRECTOR 테이블)을 제거하기
부모 테이블은 바로 제거할 수 없다. 부모 테이블의 컬럼이 자식 테이블에서 첨조되고 있기 때문에 참조 누락성 제약조건으로 인해 제거할 수 없다. 굳이 제거하고 싶으면 CASCADE 옵션을 사용해야한다.
1 | DROP TABLE DIRECTOR; |
지금 DIRECTOR 테이블의 DIRECTOR_ID 컬럼이 FILMS 테이블에서 FK로 참조되고 있기 때문에 FK 제약 조건으로 인해 테이블 제거할 수 없다.
이 경우에 DROP TABLE ... CASCADE
명령어를 이용하여 해당 테이블과 관계된 모든 개체를 함계 삭제한다.
1 | DROP TABLE DIRECTOR CASCADE; -- CASCADE 옵션으로 제거 성공 |
1 | -- 제거 성공 확인 |
부모 테이블이 제거된 경우 자식 테이블의 행은 존재하지반 FK 제약 조건은 삭제됨.
[MISSION 2] 자식 테이블 (FILMS 테이블)을 제거하기
자식 테이블은 바로 제거할 수 있다.
두 테이블을 다시 생성한 후 자식 테이블 (FILMS 테이블)을 먼저 제거 한다.
1 | DROP TABLE FILMS; -- 자식 테이블 제거 성공 |
1 | -- 제거 성공 확인 |
2. 임시 테이블
2-1. 개념
임시 테이블은 DB 접속 세션의 활동 기간 동안 존재하는 테이블이다. 세션이 종료되면 임시 테이블은 자동으로 소멸된다.
2-2. 임시 테이블 생성 문법
1 | CREATE TEMP TABLE |
2-3. 임시 테이블 실습
[실습 1] 임시 테이블 생성 후 세션 재접속
세션을 종료 후 재접속을 하면 임시 테이블이 소멸된다.
-
임시 테이블 생성
1
2CREATE TEMP TABLE
TB_CUST_TEMP_TEST (CUST_ID INT);1
SELECT * FROM TB_CUST_TEMP_TEST;
-
테이블에 값을 입력하기
1
2INSERT INTO TB_CUST_TEMP_TEST
VALUES (1);
-
세션 종료 후 재접속
-
임시 테이블 불러오기
1
SELECT * FROM TB_CUST_TEMP_TEST;
- 세션을 종료 후 재접속을 하면 임시 테이블이 소멸된 것을 확인할 수 있다.
[실습 2] 기존에 존재하는 테이블과 같은 이름으로 임시 테이블 생성 후 제거
같은 이름의 일반 테이블과 임시 테이블이 동시에 존재할 경우:
SELECT 문으로 테이블 조회할 때 임시 테이블을 볼러온다
DROP 문으로 테이블 제거할 때도 임시 테이블을 먼저 제거한다.
-
일반 테이블 생성
1
2
3
4
5CREATE TABLE TB_CUST_TEMP_TEST
(
CUST_ID SERIAL PRIMARY KEY,
CUST_NAME VARCHAR NOT NULL
);
-
같은 이름의 임시 테이블 생성
1
2CREATE TEMP TABLE TB_CUST_TEMP_TEST
( CUST_ID INT );
-
테이블 조회
1
SELECT * FROM TB_CUST_TEMP_TEST;
- 임시 테이블을 불러오는 것을 확인할 수 있다
-
테이블 제거
1
DROP TABLE TB_CUST_TEMP_TEST;
1
SELECT * FROM TB_CUST_TEMP_TEST;
- 임시 테이블이 제거되고 일반 테이블이 그대로 남아있는 것을 확인할 수 있다.
3. TRUNCATE
3-1. 개념
대용량의 테이블을 빠르게 지우는 방법으로 TRUNCATE가 있다. 테이블의 세그먼트 자체를 바로 지우기 때문에 빠르게 데이터가 지워진다.
>> DELETE VS TRUNCATE
DELETE | TRUNCATE |
---|---|
데이터가 지워지지만 테이블 용량이 줄어 들지 않는다. | 테이블을 삭제하지 않고 데이터만 삭제하지만, 테이블 용량이 줄어 든다. |
원하는 데이터만 지울 수 있다. | 한꺼번에 다 지워야 한다. |
삭제 후 잘못 삭제한 것을 되돌릴 수 있다. | 삭제 후 되돌릴 수 없다. |
속도가 느리다. | 속도가 빠르다. |
3-2. TRUNCATE 문법
1 | -- 1개의 테이블 데이터를 빠라게 삭제 |
1 | -- N개의 테이블 데이터를 빠르게 삭제 |
3-3. TRUNCATE 실습
먼저 ACCOUNT 테이블과 동일한 새로운 테이블 BIG_TABLE를 만든다.
1 | CREATE TABLE BIG_TABLE AS |
이제 TRUNCATE 문을 이용하여 BIG_TABLE의 데이터를 모두 삭제한다.
1 | TRUNCATE TABLE BIG_TABLE; |
* ROLLBACK을 통해 데이터를 다시 복원할 수 없다.
1 | ROLLBACK; |