SQL
DELETE와 TRUNCATE 차이
초코너무조코
2025. 1. 24. 11:30
728x90
목차
1. DELETE
- 역할: 특정 조건에 맞는 데이터(행)를 삭제합니다.
- 조건 사용 가능: WHERE 절을 사용하여 특정 행만 삭제할 수 있습니다.
- 예: DELETE FROM table_name WHERE condition;
- 트랜잭션 지원: 트랜잭션을 지원하므로, 삭제를 실행한 후 ROLLBACK으로 복구할 수 있습니다.
- 로그 처리: 각 행의 삭제가 개별적으로 기록됩니다(많은 양의 데이터 삭제 시 성능이 느릴 수 있음).
- 인덱스 영향 없음: 삭제된 행만 제거되고, 테이블 구조나 인덱스는 유지됩니다.
2. TRUNCATE
- 역할: 테이블의 모든 데이터를 한 번에 삭제합니다.
- 조건 사용 불가: WHERE 절을 사용할 수 없습니다. (전체 데이터 삭제 전용)
- 예: TRUNCATE TABLE table_name;
- 트랜잭션 지원 제한: 일반적으로 트랜잭션을 지원하지 않아 ROLLBACK이 불가능합니다. (DBMS에 따라 다를 수 있음)
- 빠른 성능: 로그를 최소한으로 기록하고, 테이블의 모든 행을 즉시 제거하므로 DELETE보다 빠릅니다.
- 테이블 구조 초기화: 테이블의 구조, 컬럼, 제약 조건, 인덱스는 유지되지만, **자동 증가 값(AUTO_INCREMENT)**은 초기화됩니다.
- 외래 키 제약 조건: 외래 키가 있는 테이블에는 사용이 제한될 수 있습니다.
3. 주요 차이점 비교
구분 | DELETE | TRUNCATE |
조건 사용 가능 여부 | WHERE 절 사용 가능 | 조건 사용 불가 (전체 삭제) |
트랜잭션 지원 여부 | 지원 (ROLLBACK 가능) | 일반적으로 지원하지 않음 |
성능 | 느림 (행 단위로 삭제, 로그 기록 많음) | 빠름 (테이블 전체 삭제, 로그 기록 최소) |
AUTO_INCREMENT 초기화 | 초기화되지 않음 | 초기화됨 |
외래 키 제약 조건 | 외래 키 제약 조건 허용 | 외래 키 제약 조건이 있을 경우 제한될 수 있음 |
사용 목적 | 특정 행을 삭제하거나 트랜잭션을 사용할 때 적합 | 전체 데이터 삭제 및 초기화 시 적합 |
4. 언제 사용해야 할까?
- DELETE: 데이터의 일부만 삭제하거나 트랜잭션을 통해 복구 가능성을 유지해야 할 때.
- TRUNCATE: 테이블 전체 데이터를 빠르게 삭제하고 테이블을 초기화해야 할 때.
이 차이를 이해하고 목적에 맞게 선택하면 성능과 데이터 무결성을 효과적으로 관리할 수 있습니다. 😊
728x90