[오라클 / Oracle] ON DELETE CASCADE / SET NULL / 참조되는 부모테이블 데이터 삭제하기

seulki·2022년 9월 11일
0

[oracle]

목록 보기
7/28
post-thumbnail

✨ FK(Foreign key)

  • 외래키, 외부키, 참조키, 외부 식별자 등으로 불린다.
  • FK가 정의된 테이블을 자식테이블이라고 한다.
  • 부모테이블자식의 데이터나 테이블이 삭제되도 영향을 받지 않는다.
  • 참조하는 데이터 컬럼과 데이터 타입은 반드시 일치해야 한다.
  • 참조할 수 있는 컬럼PK와 UNIQUE만 가능하다.
    -> 보통은 PK를 참조한다.
  • 부모테이블먼저 데이터가 입력되어야 참조 가능하다.
    -> 처음 설계를 잘 해야한다.

✨ 부모테이블을 참조하고 있는 자식테이블이 있을 때는

     부모테이블의 참조 데이터를 삭제할 수 없다.

참조하는 자식테이블이 있는 부모테이블 값 삭제하는 방법

  1. 현재 삭제하려는 열 값을 참조하는 자식 데이터를 먼저 삭제한다.
  2. 현재 삭제하려는 열 값을 참조하는 자식 데이터를 수정한다.
    -> 자식 테이블 데이터를 다른 값 또는 NULL값으로 수정한다.
  3. 현재 삭제하려는 열을 참조하는 자식 테이블의 FK 제약조건을 해지한다.

🎈 위의 방법을 사용하지 못하는 경우, 제약조건을 처음 지정할 때

     삭제할 데이터를 참조하는 데이터 처리 방법까지 지정한다.

✨ ON DELETE CASCADE

  • 참조되는 부모 테이블의 행에 대한 DELETE를 허용한다.
    즉, 참조되는 부모테이블 값이 삭제되면 자식 테이블 값 역시 삭제된다.
CONSTRAINT [제약조건 이름] REFERENCES 참조 테이블(참조할 열) 
	ON DELETE CASCADE
CREATE TABLE DOUGHTER(
	IDX NUMBER(10) PRIMARY KEY,
	MID NUMBER(10),
	CONSTRAINT FK_DA FOREIGN KEY(MID) REFERENCES DADDY(MID) 
   		ON DELETE CASCADE
);


✨ ON DELETE SET NULL

  • 참조되는 부모 테이블의 행에 대한 DELETE를 허용한다.
  • 부모 테이블 값이 삭제되면 해당 참조하는 자식 테이블의 값들은
    NULL값으로 설정된다.
CONSTRAINT [제약조건 이름] REFERENCES 참조테이블(참조할 열) 
	ON DELETE SET NULL
CREATE TABLE DOUGHTER(
	IDX NUMBER(10) PRIMARY KEY,
	MID NUMBER(10),
	CONSTRAINT FK_DA FOREIGN KEY(MID) REFERENCES DADDY(MID)
   		 ON DELETE SET NULL
);
profile
웹 개발자 공부 중

0개의 댓글