본문 바로가기
DB/SQL

오라클 cascade 사용방법 및 예제

by 꼬바리 2021. 3. 14.

오라클에서 cascade란

두 테이블을 연결해서

PK를 가지고 있는 쪽의 값을 삭제하면

FK로 연결된 값이 동시에 삭제되게 하는 옵션이다

 

예제에서는 부모 역할을 할 MOTHER_TABLE에 테이블 생성과정 중

CONSTRAINT 제약조건명 PRIMARY KEY (PK컬럼명);

으로 테이블 PK를 설정하고

 

위 테이블과 연결시킬

CHILD_TABLE을 만들면서 하단에

 

CONSTRAINT 제약조건명

FOREIGN KEY (CHILD_TABLE의 FK로 사용할 컬럼명)

REFERENCES 연결시킬_테이블(연결시킬_테이블의_PK_컬럼명)

ON DELETE CASCADE

 

을 넣어주면 된다

 

만약 생성과정이 아닌 ALTER로 테이블에 CASCADE를 설정해 준다면

 

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명
  FOREIGN KEY (CHILD_테이블의_FK값)
  REFERENCES MOTHER_테이블명(MOTHER_테이블의_PK)
  ON DELETE CASCADE;

 

위와 같이 해주면 된다

다음은 CASCADE 설정 후

실제 테이블에 값을 넣는 예제인데

 

 

이후 MOTHER_TABLE과 CHILD_TABLE에 값을 넣어주고

마지막으로 MOTHER_TABLE의 'A' 값을 삭제하면

 

MOTHER_TABLE의 A값을 삭제했더니

CHILD_TABLE의 PK_VAL1이 A인 값들도

같이 삭제되는 것이 보인다

 

CASCADE 제약조건 삭제방법은

CASCADE를 걸어줬던 테이블의 제약조건을 없애주면 되는데

아래와 같다

 

ALTER TABLE CHILD_테이블명 DROP CONSTRAINT 제약조건명

 

마지막으로 예제에 사용했던 코드는 아래와 같다

 

CREATE TABLE MOTHER_TABLE(
  PK_VAL1 VARCHAR2(20),
  CONSTRAINT MOTHER_PK PRIMARY KEY (PK_VAL1) -- 테이블의 PK 설정
);

CREATE TABLE CHILD_TABLE(
  PK_VAL1 VARCHAR2(20),
  VAL2 VARCHAR2(20),
  CONSTRAINT CHILD_PK
    FOREIGN KEY (PK_VAL1) -- 해당 테이블의 FK 설정
    REFERENCES MOTHER_TABLE(PK_VAL1) -- MOTHER 테이블의 PK와 연결
    ON DELETE CASCADE  -- MOTHER TABLE의 값 삭제시 연결된 값 삭제
);

-- ALTER를 이용한 CASCADE 추가
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명
  FOREIGN KEY (CHILD_테이블의_FK값) -- 해당 테이블의 FK 설정
  REFERENCES MOTHER_테이블명(MOTHER_테이블의_PK) -- MOTHER PK와 연결
  ON DELETE CASCADE; -- MOTHER TABLE의 값 삭제시 연결된 값 삭제

SELECT * FROM MOTHER_TABLE

INSERT INTO MOTHER_TABLE VALUES('A');
INSERT INTO MOTHER_TABLE VALUES('B'); -- MOTHER 테이블에 값 추가

SELECT * FROM CHILD_TABLE

INSERT INTO CHILD_TABLE VALUES('A', 'A값1');
INSERT INTO CHILD_TABLE VALUES('A', 'A값2');
INSERT INTO CHILD_TABLE VALUES('B', 'B값1');
INSERT INTO CHILD_TABLE VALUES('B', 'B값2'); -- CHILD 테이블에 값 추가

-- MOTHER 테이블의 값 삭제시 PK - FK로 연결된 CHILD 테이블의 값도 삭제
DELETE FROM MOTHER_TABLE WHERE PK_VAL1 = 'A'

-- CASCADE 삭제
ALTER TABLE CHILD_테이블명 DROP CONSTRAINT 제약조건명

 

 

출처 : wakestand.tistory.com/205

728x90
반응형

댓글