주케터의 메모장

[SQLD] 명령어 DROP/TRUNCATE/DELETE의 차이점에 대해 쉽게 알아보자! 본문

TEST/SQLD

[SQLD] 명령어 DROP/TRUNCATE/DELETE의 차이점에 대해 쉽게 알아보자!

JOOKETER 2023. 8. 31. 12:10
320x100

안녕하세요

주케터입니다 :)

오늘은 오랜만에 SQLD 내용을 다뤄보려고 합니다.

 

공부 중 많이 헷갈리는 부분이 있어 함께 공유하고

알아가보면 어떨까 싶어서 가져오게 되었어요!

 

아래의 명령어 세개는 모두 삭제와 관련된 명령어인데요

이 명령어들은, 차이점이 조금씩 존재한답니다!

 

 DROP, TRUNCATE, DELETE의 차이점을 한눈에!
DROP TRUNCATE DELETE
DDL DDL(일부 DML) DML
롤백 불가 롤백 불가 COMMIT 이전 롤백 가능
Auto Commit Auto Commit 사용자 Commit(수동)
테이블이 사용했던 저장공간내
모두 삭제
테이블이 사용했던 저장 공간중
최초 테이블 생성시 할당된 저장공간
남기고 다 삭제
데이터를 모두 삭제해도
사용했던 공간은 유지
테이블의 정의 자체를 완전히 삭제 테이블 최초 생성된 초기 상태로 만듬
(초기화)
데이터만! 삭제

 

조금 더 말을 붙이자면, DROP과  TRUNCATE는 자동 COMMIT이 있어서

롤백 자체가 불가능 한 것으로 보이고, DELETE는 수동이어서 COMMIT이 없으면 롤백이 가능합니다.

 

확실히 DROP > TRUNCATE > DELETE 순으로 삭제 범위가 넓은 것 같아요!

(맨 앞이 제일 강력)

 

해당 내용을 활용한 간단한 문제를 풀어볼까요?

 

문제 예시

Q. 다음 중 DELETE와 TRUNCATE,DROP 명령어에 대해 비교한 설명으로 가장

부적절한 것을 고르시오.

 

1) 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령어를 수행하면

DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있다.

2) DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는

테이블을 초기 상태로 만든다.

3) TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에

동일 데이터량 삭제시 DELETE보다 빠르다.

4) DROP과 TRUNCATE는 Auto Commit이고 DELETE는 사용자 Commit이다.

 

정답은? (더보기를 클릭하세요)

더보기

1번! 입니다.

조건절이 없다는 DELETE라도 데이터는 지우고

사용공간은 그대로 남겨두는 DELETE와

제일 강력하게 모든걸 지워버리는 DROP의 결과는 매우 다르겠죠...

3)번은 UNDO라는게 원상복귀하다는 말입니다.

TRUNCATE는 뒷일은 생각안하고 초기화 하기때문에

데이터 삭제시 롤백이 가능한 데이터를

남겨두는 DELETE보다 빠릅니다!

 

이해가 되셨을까요~?

저도 정리를 하면서 함께 이해하니

제대로 이해가 되는 것 같아 좋네요 :)

 

다음에 또 다른 글로 찾아오겠습니다.

그럼 안녕!

728x90