본문 바로가기

Database/MS-SQL

DB CASCASE 옵션 적용방법 캐스캐이드

반응형
CASCASE 옵션

UPDATE CASCADE : 부모 테이블의 데이터를 수정할 떄 이를 참조하고 있는
                 자식 테이블의 데이터도 함께 수정한다
DELETE CASCASE : 부모테이블의 데이터를 삭제할 때 이를 참조하고 있는 
      자식 테이블의 데이터도 함께 삭제한다






CASCADE 
상품                    판매

새우깡                쌔우깡
                            .
                            .
                         새우깡
                             .
                             .

새우깡이 단종되었을때  상품 새우깡을 지우면 CASCADE 관련옵션으로 판매된 새우깡이 지워진다 판매가 누락되면 구속되겠지 ㅋㅋ


회사에서 100명을 뽑는데 1000명이 지원했다
그리고 100명을 뽑았다 그리고 나머지 900명의 데이터를 지워야한다 이때 CASCADE 쓰면유용함
관계형성으로된 데이블에 유용하다 

업무에따라서 정확하게 사용한다



ON DELETE CASCADE 또는 ON DELETE SET NULL

자식 테이블에 데이터 있는 부모 테이블의 데이터 삭제
제약조건 참조
delete 문 참조

• ON DELETE CASCADE를 사용하면 자식 테이블에 관련된 행이 있지만 부모 테이블에서 그 행의 삭제를 허용할 수 있다.
• ON DELETE SET NULL은 자식 테이블이 참조하는 부모 테이블의 값이 삭제되면 자식 테이블의 값을 NULL 값으로 변경시킨다.

부모테이블 bb와 자식테이블 aa에서 자식 테이블에 데이터가 있는 경우에 부모 테이블의 데이터를 삭제하는 예이다.

【예제】
SQL> select table_name,constraint_name,constraint_type,
  2  r_constraint_name from user_constraints
  3  where table_name IN('AA','BB');
 
TABLE_NAME CONSTRAINT_NAME      C R_CONSTRAINT_NAME
---------- -------------------- - --------------------
AA         AA_ID_PK             P
BB         BB_NO_PK             P
BB         BB_NAME_UK           U
 
SQL> alter table aa
  2  add (constraint aa_no_fk foreign key(no)
  3       references bb(no) ON DELETE CASCADE);
 
테이블이 변경되었습니다.
 
SQL> alter table aa
  2  add (constraint aa_name_fk foreign key(name)
  3       references bb(name) ON DELETE SET NULL);
 
테이블이 변경되었습니다.
 
SQL> select table_name,constraint_name,constraint_type,
  2  r_constraint_name
  3  from user_constraints
  4  where table_name IN('AA','BB');
 
TABLE_NAME CONSTRAINT_NAME      C R_CONSTRAINT_NAME
---------- -------------------- - --------------------
AA         AA_ID_PK             P
AA         AA_NO_FK             R BB_NO_PK
AA         AA_NAME_FK           R BB_NAME_UK
BB         BB_NO_PK             P
BB         BB_NAME_UK           U
 
SQL> select * from bb;
 
        NO        SNO NAME            COUNT
---------- ---------- ---------- ----------
      1111       1000 조아라        1111000
      2222       2000 편안해        2222000
 
SQL> select * from aa;
 
        ID NAME               NO
---------- ---------- ----------
      1000 조아라           1111
      2000 편안해           2222
 
SQL> delete from bb where no=1111;
 
1 행이 삭제되었습니다.
 
SQL> delete from bb where no=2222;
 
1 행이 삭제되었습니다.
 
SQL> select * from bb;
 
선택된 레코드가 없습니다.
 
SQL> select * from aa;
 
선택된 레코드가 없습니다.
 
SQL>