Contents
see List작성일 2016. 01. 23.
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 권한 또는 테이블 소유자만 실행 가능
database
| No | 작성일 | Title |
|---|---|---|
| 3380 | 2026. 08. 20. | PostgreSQL 느린 조회를 진단하는 방법: EXPLAIN ANALYZE와 복합 인덱스 실전 가이드 |
| 3348 | 2026. 08. 11. | PostgreSQL 잠금 대기 줄이기: 트랜잭션 범위와 lock_timeout 설정 실전 가이드 |
| 3316 | 2026. 08. 03. | PostgreSQL 백업 복구 실전 가이드: pg_dump·pg_restore로 장애 복구 절차 만들기 |
| 3284 | 2026. 07. 26. | PostgreSQL 인덱스가 있는데도 느린 쿼리 해결하기: EXPLAIN ANALYZE와 복합 인덱스 설계 |
| 3254 | 2026. 07. 18. | PostgreSQL 잠금 대기 진단 가이드: pg_stat_activity로 블로킹 쿼리 찾고 장애 줄이기 |
| 3202 | 2026. 07. 09. | PostgreSQL 백업 복구 검증 가이드: pg_dump와 psql로 실제 복원까지 확인하기 |
| 3170 | 2026. 07. 01. | MySQL 느린 쿼리 원인 찾기: EXPLAIN과 복합 인덱스 점검 가이드 |
| 3116 | 2026. 06. 23. | PostgreSQL 트랜잭션 충돌 줄이기: 잠금 순서와 짧은 재시도로 데드락 대응하기 |
| 3058 | 2026. 06. 15. | PostgreSQL JSONB 조회 튜닝: GIN 인덱스와 생성 컬럼으로 느린 검색 줄이기 |
| 2971 | 2026. 06. 07. | MySQL/MariaDB 복합 인덱스 설계: 느린 목록 조회를 줄이는 WHERE·ORDER BY 점검법 |