본문 바로가기

IT/DB

데이터 삭제 delete와 truncate 차이는?

300x250

 

 

 

 

DELETE와 TRUNCATE는 MySQL에서 데이터를 삭제하는 데 사용되지만, 작동 방식, 속도, 복구 가능성 등에서 중요한 차이점이 있습니다.


 

1. DELETE

 

특징

  • 행 단위 삭제: DELETE는 특정 조건을 만족하는 행 또는 모든 행을 삭제합니다.
  • WHERE 절 사용 가능: 조건을 지정하여 특정 데이터만 삭제할 수 있습니다.
  • 로그 기록: 각 삭제 작업이 트랜잭션 로그에 기록되어 데이터 복구가 가능합니다.
  • 트리거(trigger): 삭제 작업 시 정의된 트리거가 실행됩니다.
  • 속도: 삭제할 데이터 양이 많아질수록 속도가 느려질 수 있습니다.

구문

DELETE FROM 테이블명 WHERE 조건;
 

예제

employees 테이블에서 id가 5인 데이터를 삭제:

DELETE FROM employees WHERE id = 5;

 

테이블의 모든 데이터를 삭제:

DELETE FROM employees;

 


 

2. TRUNCATE

 

특징

  • 테이블 전체 삭제: 테이블의 모든 데이터를 삭제하며 조건 지정은 불가능합니다.
  • 재설정: 테이블의 자동 증가(AUTO_INCREMENT) 값도 초기화됩니다.
  • 로그 기록 없음: 데이터가 삭제된 후 복구할 수 없습니다.
  • 트리거(trigger): 트리거가 실행되지 않습니다.
  • 속도: 테이블의 데이터를 한 번에 삭제하므로 DELETE보다 훨씬 빠릅니다.

구문

TRUNCATE TABLE 테이블명;
 

예제

employees 테이블의 모든 데이터를 삭제:

TRUNCATE TABLE employees;

 

3. DELETE와 TRUNCATE의 차이점 비교

 

특징 DELETE TRUNCATE
삭제 범위 특정 조건의 데이터 삭제 가능 (WHERE 사용). 테이블의 모든 데이터 삭제. 조건 지정 불가.
속도 느림 (행 단위 삭제). 빠름 (테이블 전체를 즉시 초기화).
로그 기록 각 행 삭제 작업이 트랜잭션 로그에 기록됨. 트랜잭션 로그를 기록하지 않음.
복구 가능성 트랜잭션 로그를 통해 복구 가능. 복구 불가능.
트리거(trigger) 트리거 실행됨. 트리거 실행되지 않음.
AUTO_INCREMENT 값이 초기화되지 않음. 값이 초기화됨.
외래 키(Foreign Key) 참조 무결성 제약 조건을 따름. 외래 키 제약 조건을 무시할 수 없음.

 

4. 사용 사례

DELETE를 사용하는 경우

  • 특정 데이터를 조건부로 삭제해야 하는 경우:
    • 예: 고객 ID가 특정 값인 행만 삭제.
  • 테이블의 데이터 일부를 유지해야 하는 경우.
  • 트리거를 실행해야 하는 경우.

TRUNCATE를 사용하는 경우

  • 테이블의 모든 데이터를 빠르게 삭제해야 하지만, 테이블 구조는 유지해야 하는 경우.
  • AUTO_INCREMENT 값을 초기화해야 하는 경우.
  • 데이터가 복구될 필요가 없으며, 테이블을 완전히 비울 때


 

5. 주의 사항

  1. 복구 여부:
    • DELETE는 트랜잭션을 지원하므로 ROLLBACK으로 복구가 가능.
    • TRUNCATE는 복구가 불가능하므로 신중하게 사용.
  2. 외래 키 제약 조건:
    • 외래 키 제약이 걸려 있는 테이블에서 TRUNCATE를 사용할 수 없습니다.
    • 이 경우 DELETE를 사용해야 합니다.

 

결론

  • 조건부 삭제가 필요하면 DELETE 사용
  • 테이블 전체를 빠르게 비우고 싶고, 데이터 복구가 필요 없으면 TRUNCATE 사용

 

 

300x250