본문 바로가기
DataBase/Oracle

DML) DELETE 구문 (delete, truncate의 차이)

by 박채니 2022. 4. 26.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


DELETE

- 테이블의 행 (레코드)를 삭제 하는 명령

-  where절을 지정하지 않으면 모든 행이 삭제

 

DELETE문 사용법

DELETE [FROM] [테이블 이름]
[WHERE 조건식];

 

emp_id가 '303'인 사원 삭제

기존 데이터

 

삭제 후 데이터

delete from
    employee_ex2
where
    emp_id = '303';

'303'의 사번을 가진 사원이 삭제되어 총 26행이 출력된 것을 확인할 수 있습니다.

 

DELTET와 같이 데이터를 삭제하는 것은 사실 실제로는 일어나지 않습니다.

데이터를 잘 관리해야 하기 때문에 대부분 삭제 컬럼 처리 혹은 삭제 데이터를 따로 관리하기도 한다고 합니다.

정말 필요 없는 데이터들은 삭제하긴 하지만, 대부분은 위처럼 처리 한다고 합니다.

 

① 소규모 데이터의 경우, 삭제 컬럼으로 처리'302' 사번을 가진 사원 퇴사 처리

update
    employee_ex2
set
    quit_yn = 'Y',
    quit_date = sysdate
where
    emp_id = '302';

소규모 데이터의 경우, 이처럼 삭제 컬럼(quit_yn)으로 처리하여 관리합니다.

다만, 위처럼 관리하면 보통 사원 조회 때는 조회 되서는 안되므로 항상 where절을 이용해 조회 해야겠죠?

 

재직자만 조회 시 (where절로 필터링)

select
    *
from
    employee_ex2
where
    quit_yn = 'N';

 

② 대규모 데이터의 경우, delete처리를 하되 삭제 데이터는 별도로 관리

- 삭제(delete)와 동시에 삭제 데이터를 퇴사자 테이블에 추가(insert)해서 관리

- trigger 객체를 통해 수월하게 처리 가능 (추후 포스팅 예정)


☞ 전체 데이터 삭제 (delete) - DML

- DML은 수행 전 상태를 메모리 상의 임시 보관 (before-image)

delete from  employee_ex2;

employee_ex2의 전체 데이터를 delete를 통해서 삭제 하였습니다만,

수행 전 상태를 메모리에 임시 보관하고 있으므로 rollback을 하면 다시 원상 복구가 가능합니다.

 

rollback;
select * from employee_ex2;

rollback;을 하니 원상복구 되었죠.

 

☞ 전체 데이터 삭제 (truncate) - DDL

- DDL은 before-image 작업 없이 즉시 데이터 베이스에 반영

- delete를 통한 전체 삭제 대비 속도 빠름

truncate table employee_ex2;

 

truncate (DDL)은 before-image 작업 없이 즉시 DB에 반영 되므로 아무리 rollback을 해도 원상복구가 되지 않습니다.

실제로 데이터가 아예 삭제가 되는 것이기 때문에 주의해야 합니다.

 

rollback;