1. DROP 명령어
개념 : 테이블 자체를 삭제하는 명령어
설명
- 해당 테이블 자체가 삭제된다.
- 해당 테이블에 생성되어있던 인덱스, 제약조건 등도 삭제된다.
- 삭제 후 되돌릴 수 없다.
- DROP TABLE [테이블명]
2. TRUNCATE 명령어
개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납하는 명령어
설명
- 해당 테이블의 데이터만 모두 삭제되며 테이블 자체가 삭제되는 것은 아니다.
- 해당 테이블에 생성되어있던 인덱스도 함께 삭제된다.
- 조건을 걸지 못해 데이터를 한꺼번에 다 지운다.
- 삭제 후 되돌릴 수 없다.
- DDL이다.
- TRUNCATE TABLE [테이블명]
3. DELETE 명령어
개념 : 테이블의 조건이 맞는 데이터를 삭제한다.
설명
- 데이터만 지워지고 사용하고 있는 디스크 상의 공간은 그대로 가지고 있다.
- 삭제 후 되돌릴 수 있다.
- DML이다.
- DELETE FROM [테이블명] WHERE [조건절]
(WHERE이 없어도 되지만 항상 데이터를 지울때는 where을 먼저 적어서 신중히 없애는 습관을 가지는 것도 좋은 것 같다.)
4. DELETE문과 비교하여 TRUNCATE TABLE의 이점
A. 트랜잭션 로그 공간을 덜 사용한다.
- DELETE문은 행을 한번에 하나씩 제거하고 삭제된 각 행에 대해 트랜잭션 로그에 항목을 기록한다.
- TRUNCATE문은 테이블의 데이터를 저장하는데 사용되는 데이터 페이지의 할당을 취소하는 방식으로 데이터를 제거하며 페이지 할당 취소만을 트랜잭션 로그에 기록한다.
B. 일반적으로 적은 수의 잠금이 사용된다.
- 행 잠금(Lock)을 사용하여 DELETE문을 실행하면 삭제를 위해 데이블의 각 행이 잠긴다.
- TRUNCATE문은 항상 테이블(스키마 잠금 포함)과 페이지를 잠그지만 각 행은 잠그지 않는다.
* Lock이란? 트랜잭션 무결성 및 데이터베이스 일관성을 유지하기 위한 방법으로 다른 사용자가 변경 중인 데이터를 읽을 수 없게 하며 여러 사용자가 동시에 같은 데이터를 변경할 수 없게 한다.
'DataBase > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] USING (1) | 2022.08.01 |
---|---|
[PostgreSQL] 이전 행 및 다음 행을 비교하는 방법 - Lag와 Lead (1) | 2022.03.11 |
[PostgreSQL] 구분자로 구분된 문자열을 array 배열로 받기(split_part, string_to_array, unnest) (0) | 2022.02.21 |
[PostgreSQL] 프로시저(Procedure) (0) | 2021.12.27 |
[PostgreSQL] row_to_json VS json_agg 의 차이 (0) | 2021.11.21 |