ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB CASCASE 옵션 적용방법 캐스캐이드
    Database/MS-SQL 2008. 11. 7. 00:28
    반응형
    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>













    반응형

    댓글

Designed by Tistory.