728x90

서론
서비스를 배포하기 전에 이전에 test를 했던 자료들을 db에서 지워줘야 합니다.
그 과정에서 한 번에 비우는 TRUNCATE 명령어를 알게되었고, DELETE, TRUNCATE, DROP 이 세 명령어에 대해 알아보고 차이점도 정리해 볼까 합니다.
DELETE
- DELETE 명령어는 테이블의 내부의 행을 모두 삭제하며, WHERE절을 이용해서 개별적으로 조건에 맞는 행만 삭제할 수 있습니다.
DELETE FROM 테이블명 WHERE 조건;
DELETE의 특징
- DELETE는 DML(데이터 조작 언어) 명령입니다.
- DELETE는 행 잠금을 사용하여 실행됩니다.
- DELETE는 WHERE 절과 함께 사용하여 특정 행을 삭제할 수 있습니다.
- DELETE는 삭제된 각 행에 대해 트랜잭션 로그를 기록합니다. 따라서 TRUNCATE보다 느립니다.
- DELETE 명령어를 사용하려면 테이블에 대한 DELETE 권한이 필요합니다.
- 인덱싱 된 VIEW(뷰)와 함께 사용할 수 있습니다.
- TRUNCATE보다 더 많은 트랜잭션 공간을 사용합니다.
- ROLLBACK(실행 취소)을 할 수 있습니다.
- 테이블의 용량은 감소하지 않습니다.
TRUNCATE
- TRUNCATE 명령어는 개별적으로 행을 삭제할 수 없으며, 테이블 내부의 모든 행을 삭제합니다.
TRUNCATE TABLE 테이블명;
TRUNCATE의 특징
- TRUNCATE는 DDL(데이터 정의 언어) 명령입니다.
- TRUNCATE는 테이블 잠금을 사용하여 실행되지만, 각 행은 잠기지 않습니다.
- TRUNCATE와 WHERE 절을 함께 사용할 수 없습니다.(개별적으로 행 삭제 불가능)
- TRUNCATE는 테이블에서 모든 행을 제거합니다.
- 트랜잭션 로그에 한 번만 기록되므로 DELETE보다 성능 면에서 더 빠릅니다.
- 인덱싱 된 VIEW(뷰)와 함께 사용할 수 없습니다.
- 테이블에서 TRUNCATE TABLE 명령어를 사용하려면 테이블에 대한 ALTER 권한이 필요합니다.
- ROLLBACK(실행 취소) 불가능합니다.
- 테이블의 용량이 초기화됩니다.
✅ 잠금(Lock) : 삽입, 삭제, 갱신 등의 트랜잭션이 수행되는 동안 특정 테이블 또는 행에 대해 CRUD 작업을 할 수 없음을 의미합니다. 즉, TRUNCATE 명령어가 수행되는 동안 해당 테이블에 다른 트랜잭션 작업을 할 수 없습니다.
DROP
- DROP TABLE 명령어는 데이터베이스에서 테이블 정의 및 해당 테이블에 대한 모든 데이터, 인덱스, 트리거, 제약 조건 및 권한을 제거합니다.
DROP의 특징
- DROP은 DDL(데이터 정의 언어) 명령입니다.
- DROP 명령은 데이터베이스에서 테이블을 제거합니다.
- 테이블의 행, 인덱스 및 권한도 제거됩니다.
- 테이블의 행이 제거될때, DML(데이터 조작 명령어) 트리거가 실행되지 않습니다.
- ROLLBACK(실행 취소) 불가능합니다.
차이점
DELETE, TRUNCATE, DROP 세 명령어 모두 삭제하는 명령어 입니다. 하지만 차이점이 존재합니다.

- DELETE 명령어 후에는 데이터만 지워지고 쓰고 있던 디스크 상의 공간은 그대로 유지됩니다.
- TRUNCATE 작업은 최초 테이블이 만들어졌던 상태, 즉 데이터가 1건도 없는 상태로 모든데이터 삭제, 컬럼값만 남아 있게 됩니다.
- DROP 명령어는 데이터와 테이블 전체를 삭제하게 되고, 사용하고 있던 공간 모두 반납하고 인덱스나 제약조근 등 오브젝트를 삭제합니다.
728x90
'Database' 카테고리의 다른 글
[DB] MySQL 테이블 오류 및 해결: "'Incorrect key file for table' (0) | 2024.01.30 |
---|---|
[DB] Database 정규화 (1NF,2NF,3NF,BCNF) 👨💻 (0) | 2023.02.07 |
[SQL] 필드명이 예약어일 경우...!! (0) | 2023.01.13 |
[SQL] 데이터 타입(Data Type) (0) | 2023.01.12 |
[SQL] 테이블의 구조와 설명을 알 수 있는 desc!! (0) | 2023.01.11 |
댓글