카테고리 없음

쿼리 DELETE문

deadlock 2025. 4. 13. 19:57

DELETE문 기초

DELETE문은 데이터베이스 테이블에서 행(row)을 삭제할 때 사용하는 SQL 명령어입니다. 다음은 DELETE문의 기본 내용입니다.

기본 구문

 
sql
DELETE FROM 테이블_이름
WHERE 조건;

사용 예제

특정 조건에 맞는 행 삭제

 
sql
-- employee_id가 207인 직원 정보 삭제
DELETE FROM employees
WHERE employee_id = 207;

여러 조건을 조합한 삭제

 
sql
-- 부서 번호가 80이고 급여가 5000 미만인 직원 삭제
DELETE FROM employees
WHERE department_id = 80 AND salary < 5000;

테이블의 모든 행 삭제

 
sql
-- 테이블의 모든 데이터 삭제 (주의 필요!)
DELETE FROM temp_employees;

주요 특징

1. WHERE 절

  • WHERE 절은 선택사항이지만, 생략하면 테이블의 모든 행이 삭제됩니다.
  • 따라서 WHERE 절 없이 사용할 때는 매우 주의해야 합니다.
  • 정확한 조건을 명시하여 의도한 데이터만 삭제하도록 합니다.

2. 서브쿼리를 이용한 DELETE

 
sql
-- 서브쿼리 결과에 해당하는 직원 삭제
DELETE FROM employees
WHERE department_id IN (SELECT department_id 
                        FROM departments 
                        WHERE location_id = 1700);

3. RETURNING 절 (오라클 특화 기능)

 
sql
-- 삭제되는 데이터 확인
DELETE FROM employees
WHERE employee_id = 208
RETURNING first_name, last_name INTO :fname, :lname;

주의사항

  1. 참조 무결성: 다른 테이블에서 참조하고 있는 행을 삭제하려고 하면 외래 키 제약조건에 따라 오류가 발생할 수 있습니다.
  2. 트랜잭션 관리: DELETE는 트랜잭션 내에서 수행됩니다. 변경사항을 저장하려면 COMMIT, 취소하려면 ROLLBACK을 실행해야 합니다.
     
    sql
    COMMIT;   -- 변경사항 저장
    ROLLBACK; -- 변경사항 취소
  3. 테이블 전체 삭제: 테이블의 모든 데이터를 삭제할 때는 DELETE보다 TRUNCATE TABLE 명령을 고려할 수 있습니다. TRUNCATE는 빠르지만 롤백이 불가능합니다.
     
    sql
    TRUNCATE TABLE employees;
  4. 플래시백 쿼리: 실수로 삭제한 데이터를 복구하기 위해 오라클의 플래시백 쿼리를 사용할 수 있습니다(설정된 경우).
     
    sql
    SELECT * FROM employees AS OF TIMESTAMP 
    (SYSTIMESTAMP - INTERVAL '15' MINUTE);

DELETE와 관련된 성능 고려사항

  1. 인덱스 영향: DELETE는 인덱스에도 영향을 주며, 대량의 데이터를 삭제할 때 성능 이슈가 발생할 수 있습니다.
  2. 커밋 주기: 대량의 데이터를 삭제할 때는 일정 간격으로 커밋하는 것이 좋습니다.
  3. WHERE 절 최적화: WHERE 절에 인덱스가 적용된 열을 사용하면 성능이 향상됩니다.

DELETE 명령어는 데이터 삭제에 강력한 도구이지만, 실행 전에 항상 조건을 신중하게 검토하고 가능하면 먼저 SELECT 문으로 삭제될 데이터를 확인하는 것이 좋습니다.

 
재시도

Claude는 아직 생성한 코드를 실행할 수 없습니다.