
오라클에서 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 제약조건명
'DB > SQL' 카테고리의 다른 글
[Oracle] 조인 (JOIN), 아우터 조인(Outer Join) (0) | 2021.03.16 |
---|---|
[ORACLE] 오라클 테이블 컬럼 추가/수정/삭제/이름 변경 하는 방법(ALTER 테이블 ADD/MODIFY/DROP/RENAME) (0) | 2021.03.16 |
JOIN이란? (0) | 2021.03.16 |
[SQL Server] SELECT TOP (0) | 2021.03.16 |
[ORACLE] CASE WHEN ~ THEN ~ ELSE END (0) | 2021.03.16 |
댓글