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. 주의 사항
- 복구 여부:
- DELETE는 트랜잭션을 지원하므로 ROLLBACK으로 복구가 가능.
- TRUNCATE는 복구가 불가능하므로 신중하게 사용.
- 외래 키 제약 조건:
- 외래 키 제약이 걸려 있는 테이블에서 TRUNCATE를 사용할 수 없습니다.
- 이 경우 DELETE를 사용해야 합니다.
결론
- 조건부 삭제가 필요하면 DELETE 사용
- 테이블 전체를 빠르게 비우고 싶고, 데이터 복구가 필요 없으면 TRUNCATE 사용
300x250
'IT > DB' 카테고리의 다른 글
기존 데이터 백업 insert 쿼리 만드는 방법 (1) | 2024.12.07 |
---|---|
left join 과 left outer join 차이는? (2) | 2024.12.05 |
MySQL SQL 오류코드 Error Code: 1046. No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar (1) | 2024.12.05 |
AND EXISTS (SELECT 1 FROM 테이블) 쿼리 조건 뜻? (0) | 2024.12.04 |
group by a, group by a,b 차이 (0) | 2024.12.03 |