MisoBoy Blog...

[20110708] Oracle 테이블 제거 (FOREIGN KEY) 본문

Oracle

[20110708] Oracle 테이블 제거 (FOREIGN KEY)

misoboy 2011. 7. 10. 15:48

Table 삭제시 외부키로 연결되어 있다면 삭제가 가능합니까 ?

질문

  Table 삭제시 외부키로 연결되어 있다면.... 삭제가 가능합니까?

답변

  참조하는 테이블(child table)은 삭제 가능하지만 참조되어지는 테이블(parent table)을 삭제하려면 Cascade Constraints 옵션을 추가로 사용해야 합니다.

  
-- 1. EMPLOYEE 테이블에 의해서 참조되어지는 DEPARTMENT 테이블을 생성한다. 
SQL> CREATE TABLE department
     (id NUMBER(2),
     dname VARCHAR2(10),
     CONSTRAINT deparment_dname_pk PRIMARY KEY(id));
  
 
--2. FOREIGN KEY를 포함하는, DEPARTMENT 테이블을 참조하는 
--   EMPLOYEE 테이블을 생성한다. 
SQL> CREATE TABLE employee
     (id NUMBER(2),
     name VARCHAR2(10),
     salary NUMBER(4),
     deptid NUMBER(2),
     CONSTRAINT employee_deptid_fk FOREIGN KEY(deptid) REFERENCES department(id));

--3. 참조되어지는 테이블을 삭제하려면 다음과 같이 에러가 발생한다. 
SQL> DROP TABLE department;
DROP TABLE department
           *
1행에 오류:
ORA-02449: 외래 키에 의해서 참조된 테이블에 유일/기본 키입니다
 
 
-- 4. 참조되어지는 테이블을 CASCADE CONSTRAINTS 옵션을 통해 삭제한다. 
SQL> DROP TABLE department CASCADE CONSTRAINTS;
 

-- 물론 참조하는 테이블은 그냥 삭제하면 된다.  
SQL> DROP TABLE employee;
    
출처 : http://www.oracleclub.com/lecture/1420