cascade 사용

유요한·2022년 5월 10일
0

DBMS

목록 보기
8/8

cascade

● cascade란 두 테이블을 연결해서 PK를 가지고 있는 쪽의 값을 삭제하면
  FK로 연결된 값이 동시에 삭제되게 하는 옵션이다.
  

● 만약 생성과정이 아닌 alter로 테이블에 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 제약조건명
profile
최선을 다하자!!

0개의 댓글