[SQL-Oracle]DDL-DROP, TRUNCATE(삭제)
아래 예제를 보면서 명령 하나하나 실행해보기 전 이 그림을 보니까 이해가 쉽게 됐다.
<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