Database/Oracle

[SQL-Oracle]DDL-DROP, TRUNCATE(삭제)

sukii 2023. 12. 6. 18:28
반응형

아래 예제를 보면서 명령 하나하나 실행해보기 전 이 그림을 보니까 이해가 쉽게 됐다.

 

<DELETE / TRUNCATE /DROP 차이>

출처: https://blog.naver.com/luckyssap/222667283700

 

 

🔘DROP

--테이블 삭제 - 테이블에 저장된 모든 행 삭제
형식) DROP TABLE 테이블명

--사용자 스키마의 테이블 목록 확인 - USER_TABLES 딕셔너리 사용 => USER1 테이블 존재함

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';


--USER1 테이블 삭제 후 확인 => USER1 테이블 삭제됨

DROP TABLE USER1;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';



--USER_TABLES 딕셔너리 대신 사용자 스키마의 테이블 목록을 확인하기 위해 TAB 뷰(VIEW)를 사용하여 검색 가능
--오라클은 테이블을 삭제할 경우 테이블 및 테이블 관련 객체를 휴지통(RECYCLEBIN)으로 이동하여 처리 

                                                                                                                                                => 삭제 테이블의 복구 가능

--TAB 뷰(VIEW)의 TNAME 컬럼에 BIN 이름으로 시작되는 테이블은 오라클 휴지통에 존재하는 삭제 테이블

SELECT * FROM TAB;

 


--오라클 휴지통의 존재하는 객체 목록 확인

SHOW RECYCLEBIN;

 

🔘 FLASHBACK
--오라클 휴지통에 존재하는 삭제 테이블 복구
형식) FLASHBACK TABLE 테이블명 TO BEFORE DROP

FLASHBACK TABLE USER1 TO BEFORE DROP;



--삭제 테이블 복구 확인 및 저장행 검색

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';
SELECT * FROM USER1;



--USER2 테이블 삭제

DROP TABLE USER2;



--오라클 휴지통 확인 
--테이블을 삭제하면 테이블에 종속된 INDEX 객체도 같이 삭제 - 오라클 휴지통에는 테이블 및 INDEX 객체 확인 가능

SHOW RECYCLEBIN;



--삭제 테이블 복구 및 확인 - 테이블에 종속된 INDEX 객체도 같이 복구

FLASHBACK TABLE USER2 TO BEFORE DROP;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';
SHOW RECYCLEBIN;



--USER로 시작되는 모든 테이블 삭제 - USER1 테이블,USER2 테이블,USER3 테이블,USER4 테이블

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';
DROP TABLE USER1;
DROP TABLE USER2;
DROP TABLE USER3;
DROP TABLE USER4;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'USER%';
SHOW RECYCLEBIN;


🔘 PURGE
--오라클 휴지통의 테이블 삭제 - 테이블에 종속된 INDEX 객체도 같이 소멸
형식) PURGE TABLE 테이블명

--오라클 휴지통에서 USER4 테이블 삭제 - 복구 불가능

PURGE TABLE USER4;
SHOW RECYCLEBIN;

 


--오라클 휴지통에 존재하는 모든 객체 삭제 - 오라클 휴지통 비우기

PURGE RECYCLEBIN;
SHOW RECYCLEBIN;



--MGR1 테이블 삭제

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'MGR%';
DROP TABLE MGR1;--논리적 삭제 - 오라클 휴지통으로 이동
SHOW RECYCLEBIN;
PURGE RECYCLEBIN;--물리적 삭제 - 복구 불가능
SHOW RECYCLEBIN;



--MGR2 테이블 삭제 - 오라클 휴지통을 사용하지 않고 직접 물리적으로 삭제 처리
형식) DROP TABLE 테이블명 PURGE

DROP TABLE MGR2 PURGE;
SHOW RECYCLEBIN;

 

🔘 TRUNCATE
--테이블 초기화 - 테이블을 생성 직후 상태로 초기화 처리 - 테이블에 저장된 모든 행 삭제
형식) TRUNCATE TABLE 테이블명

--DELETE 명령을 사용하여 BOARD1 테이블에 저장된 모든 행 삭제 후 확인

SELECT * FROM BOARD1;
DELETE FROM BOARD1;--테이블의 행을 삭제하지 않고 트렌젝션 DELETE 명령 저장
SELECT * FROM BOARD1;


--COMMIT 전에 롤백 처리 가능 - 트렌젝션에 저장된 DELETE 명령 삭제

ROLLBACK;



--TRUNCATE 명령을 사용하여 BOARD1 테이블 초기화
--DDL 명령을 전달하면 자동 커밋 처리

TRUNCATE TABLE BOARD1;
SELECT * FROM BOARD1;
ROLLBACK;--자동으로 COMMIT 처리 되었기 때문에 롤백 처리 불가능



--DELETE 명령을 사용하여 BOARD2 테이블에 저장된 모든 행 삭제

DELETE FROM BOARD2;
SELECT * FROM BOARD2;
COMMIT;



--BOARD2 테이블에 행 삽입 - NO 컬럼에 자동 증가 기능이 부여되어 있으므로 자동 증가값을 제공받아 삽입 처리

INSERT INTO BOARD2(WRITER,CONTENT) VALUES('일지매','네번째 게시글입니다.');
SELECT * FROM BOARD2;--NO 컬럼에는 자동 증가값을 제공받아 저장
COMMIT;



--TRUNCATE 명령을 사용하여 BOARD2 테이블 초기화 처리

TRUNCATE TABLE BOARD2;
SELECT * FROM USER1;



--BOARD2 테이블에 행 삽입 - 오라클은 컬럼의 자동 증가 기능은 초기화 미처리 

INSERT INTO BOARD2(WRITER,CONTENT) VALUES('장길산','다섯번째 게시글입니다.');
SELECT * FROM BOARD2;
COMMIT;

=> TRUNCATE 명령을 실행한 뒤에 다시 행을 삽입했는데도 NO 컬럼은 자동 증가 기능이 부여되어 있어

1로 초기화되지 않고 계속 숫자가 증가함.

 

 

 

+자동증가값 포스팅▼

2023.12.07 - [Coding/Oracle SQL] - [SQL-Oracle]GENERATED AS IDENTITY(식별자 컬럼)

 

[SQL-Oracle]GENERATED AS IDENTITY(식별자 컬럼)

⬛오라클의 식별자 컬럼(IDENTITY COLUMNS) --테이블을 생성할 때 행에 구분하기 위한 컬럼값을 저장하기 위해 컬럼에 PRIMARY KEY 제약조건 부여 --일반적으로 PRIMARY KEY 제약조건을 부여한 컬럼에는 자

sukis.tistory.com

2023.12.07 - [Coding/Oracle SQL] - [SQL-Oracle]시퀀스(SEQUENCE)

 

[SQL-Oracle]시퀀스(SEQUENCE)

오라클 12C 버전 이상부터는 IDENTITY 기능으로 SEQUENCE가 자동으로 생성되게끔 할 수 있으나, 그 전까지는 SEQUENCE를 사용하여 수동으로 만들어줬어야함. ('IDENTITY 기능' 클릭하면 그에 대한 포스팅으

sukis.tistory.com

 

반응형