본문 바로가기
프로그래밍/DB

SQL 명령어 DELETE, TRUNCATE, DROP의 차이점

by @GodWin 2024. 12. 5.

-



-
SQL에서 데이터를 삭제하는 명령어에는 DELETE, TRUNCATE, DROP이 있습니다. 이 명령어들은 모두 데이터를 삭제하는 용도로 사용되지만, 그 방식과 특징에 있어 큰 차이점이 있습니다. 각각의 명령어가 어떻게 다르고, 어떤 상황에 적합한지에 대해 알아보겠습니다.

1. DELETE

DELETE는 테이블에서 특정 조건에 맞는 데이터를 삭제하는 명령어입니다.
이 명령어는 행 단위로 데이터를 삭제하며, 트랜잭션을 지원하기 때문에 삭제한 데이터를 롤백할 수 있습니다.
WHERE 절을 사용하여 삭제할 데이터 범위를 지정할 수 있어서, 원하는 조건의 데이터만 선택적으로 삭제할 수 있습니다.
하지만, 삭제된 데이터는 로그에 기록되며, 이로 인해 삭제 속도가 비교적 느릴 수 있습니다.
또한, **트리거(trigger)**가 실행될 수 있어, 데이터 삭제 외에 추가적인 작업이 발생할 수도 있습니다.
DELETE를 사용할 때는 전체 데이터를 삭제할 수도 있고, 조건을 줘서 특정 데이터만 삭제할 수도 있습니다.

DELETE FROM table_name WHERE condition;

 

2. TRUNCATE

TRUNCATE는 테이블의 모든 데이터를 삭제할 때 사용하는 명령어입니다.
이 명령어는 DELETE와 달리 행 단위로 삭제하지 않고 테이블 자체를 비우는 방식으로 동작합니다.
그래서 TRUNCATE는 데이터 삭제가 매우 빠르며, 속도가 빠르고 효율적입니다. 또한, 트랜잭션 로그가 적게 기록되기 때문에 삭제된 데이터를 롤백하기 어려운 경우가 많습니다.
트리거는 실행되지 않으며, 테이블 구조는 그대로 유지됩니다. 중요한 점은 TRUNCATE를 실행하면 테이블의 AUTO_INCREMENT 값도 초기화된다는 것입니다.
만약 테이블을 완전히 비우고 다시 처음부터 데이터를 채우고 싶다면 TRUNCATE가 적합합니다.

TRUNCATE TABLE table_name;

 

3. DROP

DROP은 테이블이나 다른 데이터베이스 객체(뷰, 인덱스 등)를 완전히 삭제하는 명령어입니다.
이 명령어를 사용하면 테이블의 구조와 데이터가 모두 삭제됩니다. 삭제된 데이터와 테이블은 복구할 수 없기 때문에 매우 신중하게 사용해야 합니다.
DROP은 테이블만 삭제하는 것이 아니라, 해당 테이블과 연결된 제약 조건, 인덱스, 트리거 등도 모두 삭제됩니다.
따라서 테이블을 더 이상 사용하지 않거나, 완전히 삭제하려는 경우 DROP을 사용합니다.

DROP TABLE table_name;

 

  • DELETE는 조건에 맞는 데이터만 삭제하며, 롤백이 가능하고 트리거가 실행될 수 있습니다.
  • TRUNCATE는 테이블의 모든 데이터를 빠르게 삭제하며, 테이블의 구조는 그대로 유지됩니다. 롤백이 어려운 경우도 있으니 주의해야 합니다.
  • DROP은 테이블 자체를 삭제하며, 데이터와 구조가 모두 사라집니다. 복구할 수 없으니 매우 신중하게 사용해야 합니다.

 
이렇게 각 명령어는 상황에 맞게 적절히 사용해야 하므로, 어떤 명령어를 사용할지 잘 고민한 후 실행하는 것이 중요합니다.
어떤 명령어를 사용할지 아직 헷갈린다면, 각 명령어의 특성을 잘 기억해두세요!

 
오늘은 SQL에서 데이터를 삭제하는 명령어에는 DELETE, TRUNCATE, DROP이 있습니다. 이 명령어들은 모두 데이터를 삭제하는 용도로 사용되지만, 그 방식과 특징에 있어 큰 차이점이 있습니다. 각각의 명령어가 어떻게 다르고, 어떤 상황에 적합한지에 대해 알아보았습니다.
오늘도 즐거운 하루 되시길 바라겠습니다.