반응형
데이터베이스 작업 중 DELETE 명령은 테이블에서 데이터를 삭제하는 데 사용됩니다. 데이터 삭제는 되돌릴 수 없는 작업이기 때문에 정확성과 신중함이 요구됩니다. 이 글에서는 DELETE 명령의 기본 구조, 다양한 사용 사례, 주의사항, 그리고 최적화 방법에 대해 설명합니다.
1. DELETE의 기본 구조
DELETE 명령은 특정 조건을 만족하는 행만 삭제하거나, 조건 없이 테이블의 모든 데이터를 삭제할 수 있습니다.
기본 구문:
DELETE FROM 테이블명
WHERE 조건;
- 테이블명: 데이터를 삭제할 대상 테이블을 지정합니다.
- 조건: 삭제할 데이터를 필터링하는 조건입니다. 조건을 생략하면 테이블의 모든 데이터가 삭제됩니다.⚠ 조건 없이 DELETE를 실행하면 전체 데이터가 삭제되므로 매우 주의해야 합니다.
2. DELETE의 활용 예제
[예시 1] 특정 조건에 맞는 데이터 삭제
다음은 employee_id가 101인 직원 데이터를 삭제하는 쿼리입니다.
DELETE FROM employees
WHERE employee_id = 101;
[예시 2] 다중 조건으로 데이터 삭제
부서가 'Sales'이고 급여가 3000 이하인 직원 데이터를 삭제합니다.
DELETE FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
) AND salary <= 3000;
[예시 3] 특정 날짜 이전의 데이터 삭제
2024년 1월 1일 이전에 생성된 주문 데이터를 삭제합니다.
DELETE FROM orders
WHERE order_date < TO_DATE('2024-01-01', 'YYYY-MM-DD');
[예시 4] 서브쿼리를 활용한 데이터 삭제
department_id가 존재하지 않는 직원 데이터를 삭제합니다.
DELETE FROM employees
WHERE department_id NOT IN (
SELECT department_id
FROM departments
);
3. DELETE와 TRUNCATE의 차이
DELETE는 조건을 활용해 세밀하게 데이터를 삭제할 수 있지만, TRUNCATE는 테이블의 모든 데이터를 삭제하며 성능 면에서 더 빠릅니다.
특징 DELETE TRUNCATE
조건 사용 가능 여부 | 조건을 사용해 특정 데이터 삭제 가능 | 조건 사용 불가, 모든 데이터 삭제 |
롤백 가능 여부 | 트랜잭션 내에서 롤백 가능 | 롤백 불가 (일부 DBMS에서 제한적 지원) |
속도 | 상대적으로 느림 | 상대적으로 빠름 |
테이블 구조 | 테이블 구조와 인덱스는 유지됨 | 테이블 구조와 인덱스 유지, 그러나 테이블 재초기화 |
[TRUNCATE 예시]
TRUNCATE TABLE employees;
위 명령은 employees 테이블의 모든 데이터를 삭제합니다.
4. DELETE를 사용할 때의 주의사항
- 조건 없이 DELETE 실행 금지
조건을 지정하지 않고 DELETE를 실행하면 테이블의 모든 데이터가 삭제됩니다. - DELETE FROM employees; -- 모든 직원 데이터 삭제
- 외래 키(Foreign Key)와의 관계 확인
삭제할 데이터가 다른 테이블과 외래 키 제약으로 연결되어 있으면 삭제가 실패하거나 연쇄 삭제(CASCADE DELETE)가 발생할 수 있습니다. - 트랜잭션 사용
중요한 데이터를 삭제할 때는 **트랜잭션(TRANSACTION)**을 활용해 작업을 롤백할 수 있도록 설계합니다. - BEGIN TRANSACTION; DELETE FROM employees WHERE department_id = 10; -- 문제가 발생하면 롤백 ROLLBACK; -- 문제가 없으면 커밋 COMMIT;
- 백업 데이터 유지
데이터를 삭제하기 전에 반드시 백업을 생성해 복구 가능성을 확보합니다.
5. DELETE 성능 최적화 방법
- 인덱스 활용
DELETE 명령에 사용된 조건 필드에 적절한 인덱스를 설정하면 성능을 크게 개선할 수 있습니다. - DELETE 분할 실행
대량 데이터를 삭제할 때는 한 번에 처리하지 말고 여러 번에 나누어 실행하세요. - DELETE FROM orders WHERE order_date < TO_DATE('2023-01-01', 'YYYY-MM-DD') AND ROWNUM <= 1000;
- 테이블 파티셔닝(Table Partitioning)
대량 데이터가 포함된 테이블은 파티셔닝을 활용해 특정 파티션만 삭제할 수 있습니다.
결론
DELETE는 데이터베이스 관리에서 필수적인 명령으로, 조건을 활용해 데이터를 세밀하게 삭제할 수 있는 강력한 도구입니다. 하지만, 삭제는 되돌릴 수 없는 작업이므로 항상 주의를 기울이고 트랜잭션과 백업 같은 안전 장치를 사용하는 것이 중요합니다. DELETE의 효과적인 사용법을 이해하고 다양한 상황에 맞게 활용한다면 데이터베이스 관리를 더욱 효율적으로 수행할 수 있을 것입니다.
반응형
'Database' 카테고리의 다른 글
오라클 SAVEPOINT로 복구 지점 설정하기 (0) | 2024.12.03 |
---|---|
오라클 COMMIT과 ROLLBACK을 활용한 트랜잭션 관리 (0) | 2024.12.03 |
오라클 UPDATE로 데이터 수정하기 (0) | 2024.12.03 |
오라클 DB에서 INSERT INTO로 데이터 추가하기 (0) | 2024.12.03 |
오라클 DROP TABLE로 테이블 삭제하기 (0) | 2024.12.03 |