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