[MySQL] DELETE
DELETE 명령어의 기본 구문
DELETE
명령어는 MySQL에서 데이터 행을 삭제하기 위해 사용됩니다. 이 명령어는 주로 조건에 맞는 특정 데이터를 제거할 때 사용됩니다. DELETE
명령어의 기본 구문은 아래와 같습니다.
DELETE FROM 테이블이름
WHERE 조건;
테이블이름
: 삭제할 데이터가 있는 테이블의 이름입니다.조건
: 어떤 데이터 또는 데이터들을 삭제할지 결정하는 조건입니다. 조건이 생략될 경우 테이블의 모든 데이터가 삭제될 수 있으므로 주의가 필요합니다.
예시
다음 예시는 "employees" 테이블에서 id
가 10인 직원을 삭제하는 SQL 문입니다.
DELETE FROM employees
WHERE id = 10;
DELETE 사용 시 주의할 점
- 데이터 복원의 어려움:
DELETE
로 삭제된 데이터는 복원이 매우 어렵습니다. 따라서DELETE
를 사용하기 전에는 대상 데이터를 정확히 확인하거나, 필요 시 데이터 백업을 고려해야 합니다. - 조건의 중요성:
WHERE
절을 생략하면 테이블의 모든 데이터가 삭제됩니다. 이러한 실수를 방지하기 위해, 가능한 항상WHERE
절을 명시해야 합니다. - 성능 고려: 많은 양의 데이터를 삭제할 때는 성능 저하가 발생할 수 있습니다. 이는 인덱스 재구축, 대량의 로그 생성 등 여러 요소에 의해 발생합니다.
DELETE와 TRUNCATE의 차이점
DELETE
와 TRUNCATE
명령어는 모두 테이블에서 데이터를 제거하는 데 사용되지만, 그 방식과 특성에 있어 몇 가지 주요 차이점이 있습니다.
- 성능:
TRUNCATE
는DELETE
보다 일반적으로 더 빠릅니다. 이는TRUNCATE
가 데이터 페이지를 직접 삭제하고, 로우 단위로 삭제를 기록하지 않기 때문입니다. - 롤백 가능성:
TRUNCATE
는 트랜잭션 로그를 거의 남기지 않아, 실행 취소(롤백)하기 어렵습니다. 반면,DELETE
는 롤백이 가능합니다. - 조건 사용:
DELETE
는WHERE
조건을 사용하여 특정 데이터만 선택적으로 삭제할 수 있지만,TRUNCATE
는 테이블의 모든 데이터를 삭제하며 조건을 사용할 수 없습니다. - 트리거 발동:
DELETE
는 관련 트리거를 발동할 수 있지만,TRUNCATE
는 그렇지 않습니다.
예시
"employees" 테이블의 모든 데이터를 삭제하는 경우:
-
DELETE
사용 예:DELETE FROM employees;
-
TRUNCATE
사용 예:TRUNCATE TABLE employees;
테이블의 선택된 로우만 삭제하려면 DELETE
를 사용해야 하며, 전체 테이블을 빠르게 비우려면 TRUNCATE
가 적합합니다. 사용하는 명령어를 결정할 때 데이터 복원의 필요성, 성능 영향, 그리고 조건적 삭제의 요구 사항을 고려해야 합니다.