Oracle에서는 3가지 종류의 삭제 명령어가 존재한다. 이 명령어들은 각각의 차이와 쓰임새가 달라 처음 접할 때 당혹감을 줄 수 있다. 필자 또한 DROP보다 DELETE에 더 익숙해 있던 비전공자라 신기했던 그 느낌을 떠올리며 세 가지 명령어에 대한 정의를 작성해본다.
DROP - 테이블 정의 및 해당 테이블에 대한 모든 데이터, 인덱스, 트리거, 제약 조건 및 권한을 제거한다.
특징 ① DDL(데이터 정의 언어) 명령이다.
② ROLLBACK(실행 취소)이 불가능하다.
③ 테이블의 행, 인덱스 및 권한도 제거된다.
④ 테이블이 사용했던 Storage는 모두 Release 처리 된다. 즉, 데이터와 테이블
전체를 삭제하고 사용하고 있던 공간도 모두 반납하며 인덱스나 제약조건 등
오브젝트로 삭제한다.
※ 오라클 10g부터는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 개념처럼 잠시 삭제되고 테이블 이름이 BIN$..로 변경된다.
TRUNC - 개별적으로 행을 삭제할 수 없고 테이블 내부의 모든 행을 삭제한다.
특징 ① DDL(데이터 정의 언어) 명령이다.
② ROLLBACK(실행 취소)이 불가능하다.
③ 트랜잭션 로그에 한 번만 기록되므로 DELETE보다 성능 면에서 더 빠르다.
④ TRUNCATE는 테이블에서 모든 행을 제거하고 WHERE 절을 함께 사용할 수 없다.
(개별적으로 행 삭제 불가능하다)
⑤ 테이블의 용량이 초기화 되고, 인덱스 등도 모두 삭제 된다.
DELETE - 테이블의 내부의 행을 모두 삭제하며, WHERE 절을 사용하여 개별적으로 행을 삭제할 수 있다.
특징 ① DELETE는 DML(데이터 조작 언어) 명령이다.
② Commit이전에는 Rollback이 가능하다.
③ 삭제된 각 행에 대해 트랜잭션 로그를 기록한다.
④ 전체 또는 일부만 삭제 가능 하고 삭제 행수를 반환한다.
⑤ 행 잠금을 사용하여 실행된다.
※ 행 잠금 : 삽입, 삭제, 갱신 등의 트랜잭션이 수행되는 동안특정 테이블 또는 행에 대해 CRUD 작업을 할 수 없는 상태이다.
삭제 명령어의 실행 결과 차이
스키마
란 데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 메타데이터를 형식 언어로 정의한 구조 말한다. DBMS가 주어진 설정에 따라 스키마를 생성하고 사용자가 자료를 저장, 조회, 삭제, 변경할 때 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행한다.
메타데이터는 어떤 목적을 가지고 만들어진 데이터라는 뜻이다.
하나의 데이터베이스를 사용자의 관점에 따라 외부 스키마,개념 스키마,내부 스키마 이렇게 세 개의 단계로 나누는데 이것을 스키마의 3계층이라고 한다. 스키마의 3계층은 데이터 베이스 스키마에서 가장 중요한 핵심 개념이라고 볼 수 있다.
스키마
- 응용 프로그래머나 사용자가 그룹 또는 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.
- 동일한 데이터에 대해, 서로 다른 관점을 정의할 수 있도록 허용한다.(=하나의 데이터에 대해 각각의 사용자들이 바라보고 입력하는 검색어가 서로 다를 수 있다.)
- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마(Sub Schema)라고도 한다.
- 일반 사용자는 질의어(*SQL)를 이용하여 데이터베이스(DB)를 쉽게 사용할 수 있다.
- 사용자 관점으로, 모든 응용 시스템과 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 데이터베이스 구조를 논리적으로 정의(명세)한 것이다.
- 각 데이터베이스에는 한 개의 개념 스키마만 존재한다.
- 데이터베이스 관리자(DBA)에 의해서 구성된다.
- 개체간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
- 그냥 스키마 라고 하면 대부분 개념 스키마를 의미한다.
- 컴퓨터(=데이터베이스) 관점에서의 DB가 저장되는 방법을 기술한 것
- 물리적 저장장치의 입장으로 바라보기 때문에 내부 스키마를 확인하는 사람은 시스템 프로그래머이다.
- 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 나타낸다.
- 내부 스키마에 의해서 곧바로 구현되는 것이 아니라 내부 스키마에 기술한 내용에 따라 운영체제의 파일 시스템에 의해 물리적 저장장치에 기록된다.
https://developer-talk.tistory.com/258 (drop, delete, trunc)
https://bangu4.tistory.com/81 (drop, delete, trunc)