DELETE
- 테이블에서 특정 조건에 맞는 데이터를 삭제하는 SQL 명령어
- 데이터를 하나씩 삭제하며, 삭제된 데이터는 복구가 가능(트랜잭션을 통해 롤백 가능)
DELETE FROM employees
WHERE department = 'HR';
TRUNCATE
- 테이블에 있는 모든 데이터를 한 번에 삭제하는 SQL 명령어
- 데이터의 구조(테이블 스키마)는 유지하지만, 삭제된 데이터는 복구가 불가능
TRUNCATE TABLE employees;
DELETE vs TRUNCATE
| 비교 항목 |
DELETE |
TRUNCATE |
| 데이터 삭제 범위 |
조건에 따라 삭제 가능 |
테이블 전체 데이터 삭제 |
| 속도 |
느림 (트랜잭션 로그 기록) |
빠름 |
| 복구 가능 여부 |
트랜잭션 롤백을 통해 복구 가능 |
복구 불가 |
| 트리거(trigger) |
트리거 호출 |
트리거 호출되지 않음 |
| 외래 키 사용 테이블 |
사용 가능 |
사용 불가 |
요약
- DELETE는 조건부 데이터 삭제에 적합하며, 트랜잭션을 통해 복구가 가능
- TRUNCATE는 테이블의 모든 데이터를 빠르게 초기화할 때 적합하나, 복구가 불가능하고 외래 키 제한이 있음
- DELETE는 상세 데이터 관리가 필요한 경우에, TRUNCATE는 성능이 중요한 경우에 사용
출처
OpenAI의 ChatGPT (https://openai.com)