logo

[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의 차이점

DELETETRUNCATE 명령어는 모두 테이블에서 데이터를 제거하는 데 사용되지만, 그 방식과 특성에 있어 몇 가지 주요 차이점이 있습니다.

  • 성능: TRUNCATEDELETE보다 일반적으로 더 빠릅니다. 이는 TRUNCATE가 데이터 페이지를 직접 삭제하고, 로우 단위로 삭제를 기록하지 않기 때문입니다.
  • 롤백 가능성: TRUNCATE는 트랜잭션 로그를 거의 남기지 않아, 실행 취소(롤백)하기 어렵습니다. 반면, DELETE는 롤백이 가능합니다.
  • 조건 사용: DELETEWHERE 조건을 사용하여 특정 데이터만 선택적으로 삭제할 수 있지만, TRUNCATE는 테이블의 모든 데이터를 삭제하며 조건을 사용할 수 없습니다.
  • 트리거 발동: DELETE는 관련 트리거를 발동할 수 있지만, TRUNCATE는 그렇지 않습니다.
 

예시

"employees" 테이블의 모든 데이터를 삭제하는 경우:

  • DELETE 사용 예:

    DELETE FROM employees;
    
  • TRUNCATE 사용 예:

    TRUNCATE TABLE employees;
    

테이블의 선택된 로우만 삭제하려면 DELETE를 사용해야 하며, 전체 테이블을 빠르게 비우려면 TRUNCATE가 적합합니다. 사용하는 명령어를 결정할 때 데이터 복원의 필요성, 성능 영향, 그리고 조건적 삭제의 요구 사항을 고려해야 합니다.

Previous
INSERT
Next
UPDATE