세 가지 명령어 모두 "삭제" 기능을 하지만, 각각 삭제하는 범위와 특징이 다르다.
하나씩 알아보도록 하자
DELETE
- WHERE절을 사용하여 테이블의 데이터를 하나하나 선택하여 제거하는 방식
- WHERE절을 사용하지 않고 모든 테이블의 데이터를 삭제하더라도 내부적으로는 하나하나 선택하여 삭제를 진행한다.
- 잘못 삭제하였을 경우 commit을 하기 전이라면 ROLLBACK을 통해 되돌릴 수 있다.
- ROLLBACK을 하기 위한 정보를 기록하기 때문에 TRUNCATE보다는 느리다.
- 행을 삭제하는 것이기 때문에, 존재하는 데이터의 양이 많다면 삭제될 때마다 많은 system 자원을 소모한다.
- 원하는 데이터, 행만 삭제할 때는 DELETE를 사용, 전체 데이터, 행을 삭제하고 싶으면 TRUNCATE를 사용한다.
- DELETE를 하더라도 사용했던 테이블이 사용하는 저장공간은 그대로 남아있다.
TRUNCATE
- 테이블을 최초 생성된 초기 상태로 만드는 명령어이다.
- 전체 데이터를 한 번에 제거하는 방식이다.(DELETE와 상반됨)
- TRUNCATE TABLE... 을 하게 되면 CREATE TABLE... 을 한 것과 같은 상태가 된다.
- 자동 commit이 되기 때문에 ROLLBACK이 불가능하고, 무조건 전체 삭제만 가능하다.
- 삭제 행 수를 반환하지 않는다.
- 최초 테이블을 생성할 때 주어진 저장공간만 남겨두고 나머지는 반납한다.
DROP
- 테이블의 존재 자체를 삭제해 버린다.
- ROLLBACK이 불가능하다.
- 테이블이 가지고 있던 저장공간을 모두 반납한다.
한눈에 비교
DELETE | TRUNCATE | DROP | |
명령어 종류 | DML | DDL | DDL |
처리 속도 | 느림 | 빠름 | 빠름 |
COMMIT | 사용자가 직접 | 자동 | 자동 |
ROLLBACK | 가능 | 불가능 | 불가능 |
삭제 방식 | 데이터만 삭제 (하나의 행) | 전체 데이터 삭제 (모든 행) | 테이블 자체를 삭제 |
삭제되는 범주의 크기를 보면 DROP > TRUNCATE > DELETE 의 관계가 있다.
참고
https://goddaehee.tistory.com/55
https://prinha.tistory.com/entry/SQL-DELETE-TRUNCATE-DROP-%EC%B0%A8%EC%9D%B4%EC%A0%90
'멋진 개발자 > DB' 카테고리의 다른 글
개발자 성장 기록 49 - Oracle과 MySQL (0) | 2024.04.16 |
---|---|
개발자 성장 기록 48 - WHERE, HAVING (0) | 2024.04.15 |
개발자 성장 기록 40 - Redis (0) | 2024.04.04 |
개발자 취준 기록 31 - Primary Key, Foreign Key (1) | 2024.03.26 |
개발자 취준 기록 29 - DDL, DML, DCL (0) | 2024.03.25 |