Contents
see ListOracle 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 권한 또는 테이블 소유자만 실행 가능