DROP | TRUNCATE | DELETE |
테이블 자체를 삭제해라 | 테이블의 데이터를 전부 삭제하고, 사용하고 있는 공간을 반납해라 | 테이블의 데이터를 전부 삭제하고 기록해라 |
DDL | DDL(일부 DML 성격 가짐) | DML |
Rollback 불가능 | Rollback 불가능 | Commit 이전 Rollback 가능 |
Auto Commit | Auto Commit | 수동 Commit |
테이블이 사용했던 모든 Storage 모두 Release | 테이블이 사용했던 Storage중 최초 테이블 생성시 할당된 Storage만 남기고 Release | 데이터를 모두 Delete해도 Storage는 Realease 되지 않음 |
테이블의 정의 자체를 완전히 삭제함 | 테이블을 최초 생성된 초기 상태로 만듦 | 데이터만 삭제 |
기본적으로 Storage 처리 방법에 따라 세 명령어의 결과가 달라진다,
우선, Storage를 모두 없애는 DROP의 경우, 테이블의 정의와 생성, 수정 기록을 모두 지우기 때문에 당연히 Rollback은 안되고 테이블에 대한 정의 명령어이므로 DDL이다.
그리고 최초 Storage만 남기고 모두 지우는 TRUNCATE는 우선 Storage를 삭제하기 때문에 Rollback은 불가능하지만, 최초 테이블의 형태는 가지고 있기 때문에 DDL이지만 DML 성격을 가진다.
마지막으로 DELETE는 Storage를 건들지 않고 데이터만 삭제하므로 Rollback이 가능하고, 데이터에 대한 처리이므로 DML이다. 또한, 다른 두 명령어와 다르게 Rollback 기록을 하기 때문에 속도가 느리며 용량을 많이 잡아먹는다.
메모리 잘 생각해서 DELETE만 쓰지 말고, TRUNCATE 자주 써봐야겠다.
내일 쿼리 쳐다보면서 실 사용 예를 찾아봐야겠다.
사진출처 : wikidocs.net/4021
'프로젝트(종료) > SQLD 자격증 따기' 카테고리의 다른 글
여러가지 COUNT() 쓰임새 (0) | 2021.03.09 |
---|---|
DISTINCT와 GROUP BY의 차이 (0) | 2021.03.09 |
PK와 FK (0) | 2021.03.04 |
DML, DDL, DCL, TCL에 대해 (0) | 2021.03.03 |
ON DELETE CASCADE와 SET NULL (0) | 2021.03.03 |
댓글