Oracle DROP TABLE CASCADE CONSTRAINTS

Oracle에서 외래 키(FK) 제약조건이 참조하는 테이블을 삭제할 때 CASCADE CONSTRAINTS 옵션을 사용합니다. 종속된 제약조건을 함께 제거하는 방법입니다.

1. 기본 문법

-- 외래 키 제약조건 무시하고 테이블 삭제
DROP TABLE 테이블명 CASCADE CONSTRAINTS;

-- Tablespace 공간도 즉시 반환
DROP TABLE 테이블명 CASCADE CONSTRAINTS PURGE;

-- 예시
DROP TABLE TB_ORDER CASCADE CONSTRAINTS;
DROP TABLE TB_ORDER_DETAIL CASCADE CONSTRAINTS PURGE;

2. 일반 DROP vs CASCADE CONSTRAINTS

-- 상황: TB_ORDER_DETAIL이 TB_ORDER를 참조

-- 일반 DROP - 오류 발생
DROP TABLE TB_ORDER;
-- ORA-02449: unique/primary keys in table referenced by foreign keys

-- CASCADE CONSTRAINTS - 성공
DROP TABLE TB_ORDER CASCADE CONSTRAINTS;
-- TB_ORDER_DETAIL의 FK 제약조건도 함께 삭제됨

3. 삭제되는 것과 유지되는 것

삭제됨유지됨
해당 테이블참조하던 테이블
해당 테이블의 모든 제약조건참조 테이블의 데이터
참조하던 FK 제약조건참조 테이블의 다른 제약조건
인덱스, 트리거-

4. 실전 예시

-- 1. 현재 참조 관계 확인
SELECT 
    a.table_name AS child_table,
    a.constraint_name AS fk_name,
    c.table_name AS parent_table
FROM user_constraints a
JOIN user_constraints c ON a.r_constraint_name = c.constraint_name
WHERE c.table_name = UPPER("TB_ORDER");

-- 2. CASCADE로 부모 테이블 삭제
DROP TABLE TB_ORDER CASCADE CONSTRAINTS PURGE;

-- 3. 삭제 후 확인 (FK가 제거되었는지)
SELECT constraint_name, constraint_type 
FROM user_constraints 
WHERE table_name = UPPER("TB_ORDER_DETAIL");

5. PURGE 옵션

-- PURGE 없이 삭제 - 휴지통으로 이동
DROP TABLE TB_ORDER CASCADE CONSTRAINTS;
-- RECYCLEBIN에서 복구 가능: FLASHBACK TABLE TB_ORDER TO BEFORE DROP;

-- PURGE와 함께 삭제 - 완전 삭제
DROP TABLE TB_ORDER CASCADE CONSTRAINTS PURGE;
-- 복구 불가, Tablespace 즉시 반환

6. 여러 테이블 순서대로 삭제

-- 방법 1: CASCADE CONSTRAINTS 사용
DROP TABLE TB_ORDER CASCADE CONSTRAINTS PURGE;
DROP TABLE TB_ORDER_DETAIL CASCADE CONSTRAINTS PURGE;
DROP TABLE TB_PRODUCT CASCADE CONSTRAINTS PURGE;

-- 방법 2: 참조 순서 역순으로 삭제 (CASCADE 불필요)
DROP TABLE TB_ORDER_DETAIL PURGE;  -- 자식 먼저
DROP TABLE TB_ORDER PURGE;          -- 부모 나중에

7. 주의사항

  • CASCADE CONSTRAINTS는 FK만 삭제, 데이터는 삭제 안 함
  • ON DELETE CASCADE와 다름 (이건 데이터 삭제)
  • 프로덕션에서 사용 시 반드시 백업 먼저
  • DBA 권한 또는 테이블 소유자만 실행 가능