안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
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;
'DataBase > Oracle' 카테고리의 다른 글
DDL/CONSTRAINT) NOT NULL 제약 조건 (0) | 2022.04.26 |
---|---|
DDL) CREATE 구문 (테이블/열 이름 생성 규칙, 주석) (0) | 2022.04.26 |
DML) UPDATE 구문 (0) | 2022.04.26 |
DML) INSERT 구문 (subquery 이용, insert all 이용) (0) | 2022.04.25 |
WINDOW FUNCTION) 순위관련처리(rank, dense_rank, row_number), 집계관련처리(sum, avg, listagg...) (0) | 2022.04.22 |