- 오라클 DELETE 문
개요
menu_book DELETE 문은 오라클 데이터베이스에서 테이블의 데이터 행을 제거하는 데 사용되는 DML(Data Manipulation Language) 명령어입니다. 조건에 맞는 특정 행들만 삭제하거나, 테이블의 모든 데이터를 삭제할 수 있습니다.
기본 구문
DELETE FROM table_name [WHERE condition];
DELETE 문의 주요 특징
- 테이블에서 행 단위로 데이터 삭제
- WHERE 절로 삭제할 행 지정 (생략 시 전체 행 삭제)
- 트랜잭션 제어 가능 (COMMIT 또는 ROLLBACK)
- 삭제된 데이터는 FLASHBACK 기능으로 복구 가능 (일정 기간 내)
DELETE 사용 예제
조건부 삭제
-- 사원번호가 101인 사원 삭제 DELETE FROM employees WHERE employee_id = 101;
서브쿼리를 이용한 삭제
-- 급여가 평균보다 낮은 사원 삭제 DELETE FROM employees WHERE salary < (SELECT AVG(salary) FROM employees);
전체 데이터 삭제
-- employees 테이블의 모든 데이터 삭제 DELETE FROM employees;
고급 DELETE 기능
다중 테이블 삭제
-- 부서가 'IT'인 사원들 삭제 DELETE FROM employees WHERE department_id IN ( SELECT department_id FROM departments WHERE department_name = 'IT' );
RETURNING 절 사용 (PL/SQL)
-- 삭제된 행의 정보 반환 DELETE FROM employees WHERE department_id = 10 RETURNING employee_id, last_name INTO :emp_id, :emp_name;
DELETE 성능 고려사항
인덱스 활용
- WHERE 조건에 인덱스가 있는 컬럼 사용 시 성능 향상
대량 데이터 삭제
BEGIN LOOP DELETE FROM large_table WHERE rownum <= 10000 AND create_date < TO_DATE('2020-01-01', 'YYYY-MM-DD'); EXIT WHEN SQL%ROWCOUNT = 0; COMMIT; END LOOP; END;
TRUNCATE와의 차이점
특징 | DELETE | TRUNCATE |
---|---|---|
실행 속도 | 느림 | 매우 빠름 |
롤백 가능 | 가능 | 불가능 |
저장공간 회수 | 안함 | 즉시 회수 |
트리거 발생 | 발생 | 발생 안함 |
WHERE 조건 | 사용 가능 | 사용 불가 |
주의사항
- WHERE 절 없이 실행하면 테이블의 모든 데이터가 삭제됨
- 대량 데이터 삭제 시 트랜잭션 로그 과다 생성 가능
- 외래키 제약조건이 있는 경우 참조 무결성 위반 가능성
- 삭제 전 데이터 백업 권장