데이터베이스/ORACLE

Oracle ON DELETE CASCADE와 SET NULL: 외래 키 옵션 완벽 가이드

CodeCaine Explorer 2024. 12. 20. 10:26
728x90
반응형
SMALL

안녕하세요! 😊 오늘은 Oracle에서 외래 키(Foreign Key) 제약 조건을 설정할 때 사용되는 ON UPDATEON DELETE 옵션들을 쉽게 설명해 드릴게요. 하나씩 차근차근 살펴보도록 해요!


💡 외래 키(Foreign Key)란?

외래 키는 한 테이블의 컬럼이 다른 테이블의 기본 키(Primary Key)를 참조하도록 하는 제약 조건이에요. 데이터의 무결성(데이터가 일관성 있고 정확함)을 유지하는 데 도움을 줍니다.


💡 ON UPDATEON DELETE란?

  • ON UPDATE: 부모 테이블(참조하는 테이블)의 기본 키 값이 업데이트될 때 발생할 동작을 지정합니다.
  • ON DELETE: 부모 테이블의 데이터가 삭제될 때 발생할 동작을 지정합니다.

Oracle에서 ON UPDATE는 지원하지 않지만, ON DELETE는 사용할 수 있어요.


💡 옵션 종류

1. NO ACTION

  • 기본 동작이에요.
  • 부모 테이블의 데이터가 삭제되거나 업데이트되면 아무런 작업을 하지 않고 제약 조건을 확인해요.
  • 만약 자식 테이블에 일치하는 데이터가 존재하면 에러가 발생합니다.

🔑 예제

CREATE TABLE parent_table (
    id NUMBER PRIMARY KEY
);

CREATE TABLE child_table (
    id NUMBER,
    parent_id NUMBER,
    CONSTRAINT fk_parent FOREIGN KEY (parent_id)
    REFERENCES parent_table(id) ON DELETE NO ACTION
);

🚩 동작

  • 부모 테이블의 id를 삭제하려 하면, 자식 테이블에 해당 parent_id가 존재하면 에러 발생.

2. RESTRICT

  • NO ACTION과 비슷하지만, 즉시 제약 조건을 확인합니다.
  • 트랜잭션이 완료되지 않아도 제약 조건 위반 여부를 바로 체크합니다.

🔑 예제

CONSTRAINT fk_parent FOREIGN KEY (parent_id)
REFERENCES parent_table(id) ON DELETE RESTRICT

🚩 동작

  • 부모 테이블의 id를 삭제하려 하면, 자식 테이블에 데이터가 있는 경우 즉시 에러 발생.

3. CASCADE

  • 부모 테이블의 데이터가 삭제되면, 자식 테이블의 관련 데이터도 삭제합니다.
  • 연관된 데이터를 자동으로 제거해야 할 때 유용해요.

🔑 예제

CONSTRAINT fk_parent FOREIGN KEY (parent_id)
REFERENCES parent_table(id) ON DELETE CASCADE

🚩 동작

  • 부모 테이블의 id가 삭제되면, 자식 테이블에서 해당 parent_id자동 삭제.

4. SET NULL

  • 부모 테이블의 데이터가 삭제되면, 자식 테이블의 외래 키 값을 NULL로 설정합니다.
  • 자식 데이터를 유지하되, 참조를 없애고 싶을 때 유용해요.

🔑 예제

CONSTRAINT fk_parent FOREIGN KEY (parent_id)
REFERENCES parent_table(id) ON DELETE SET NULL

🚩 동작

  • 부모 테이블의 id가 삭제되면, 자식 테이블의 parent_idNULL로 변경.

5. SET DEFAULT

  • 부모 테이블의 데이터가 삭제되면, 자식 테이블의 외래 키 값을 기본값(Default)으로 설정합니다.
  • Oracle에서는 SET DEFAULT를 지원하지 않아요.

💡 실전 예제: CASCADE와 SET NULL 비교

CREATE TABLE parent_table (
    id NUMBER PRIMARY KEY
);

CREATE TABLE child_table (
    id NUMBER,
    parent_id NUMBER,
    CONSTRAINT fk_parent_cascade FOREIGN KEY (parent_id)
    REFERENCES parent_table(id) ON DELETE CASCADE,
    CONSTRAINT fk_parent_setnull FOREIGN KEY (parent_id)
    REFERENCES parent_table(id) ON DELETE SET NULL
);
  • 부모 테이블에서 데이터를 삭제하면:
    • fk_parent_cascade 제약 조건이 있는 자식 데이터는 삭제됩니다.
    • fk_parent_setnull 제약 조건이 있는 자식 데이터는 NULL로 설정됩니다.

💡 마무리

외래 키 옵션은 데이터의 무결성을 유지하면서 삭제 또는 업데이트 동작을 제어할 수 있는 강력한 도구예요. 😊 실수하지 않도록 각 옵션의 동작을 잘 이해하고 적절히 사용해 보세요!

728x90
반응형
SMALL