ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SQL] 참조 CASCADE관한 설명
    Database/SQL (oracle, mysql) 2019. 5. 30. 19:55

    ※ 참고)

       create table emp5
       (
           deptno  number(2)  references 참조테이블명(참조컬럼명) on delete cascade
                                                             ---------
                                                                             부모 (부서)테이블에서 특정 번호(예:10번부서)를 삭제했을때
                                                                             자식 (사원)테이블에서 10번 부서에 근무하는 사원들을 삭제!! 
       );
                       
       create table emp5
       (
           deptno  number(2)  references 참조테이블명(참조컬럼명) on delete set null
                                                             ---------
                                                                             부모 (부서)테이블에서 특정 번호(예:10번부서)를 삭제했을때
                                                     자식 (사원)테이블에서 10번 부서에 근무하는 사원들의 deptno를 null값으로 변경!!
       );                
       
    테스트1)
       drop table dept5;
       create table dept5
       as select * from dept;
       
       alter table dept5
       add constraint dept5_pk primary key (deptno);
       
       ------------------------------------------------
       drop table emp5;
       create table emp5
       (
          empno   number(4),
          ename   varchar2(15),
          sal     number(7,2),
          deptno  number(2)  constraint emp5_fk references dept5(deptno) on delete cascade
       );
      
         
       insert into emp5 (empno,ename,sal,deptno)
       select empno,ename,sal,deptno from emp;                
                  
       ## 부모 테이블의 10번 부서 삭제 ##
       select count(*) from emp5;        ---> 14명 사원           
       delete from dept5 where deptno=10;   ---> 1행(10번부서) 삭제
       
       select count(*) from emp5;        ---> 11명 사원 (10번부서의 사원들도 함께 삭제 되었음)           
     
     테스트2)
       alter table emp5
       drop constraint emp5_fk;
     
       drop table dept5;
       create table dept5
       as select * from dept;
       
       alter table dept5
       add constraint dept5_pk primary key (deptno);
       
       ------------------------------------------------
       drop table emp5;
       create table emp5
       (
          empno   number(4),
          ename   varchar2(15),
          sal     number(7,2),
          deptno  number(2)  constraint  emp5_fk references dept5(deptno) on delete set null
       );  
       
       insert into emp5 (empno,ename,sal,deptno)
       select empno,ename,sal,deptno from emp;                
                  
       ## 부모 테이블의 10번 부서 삭제 ##
       select count(*) from emp5;        ---> 14명 사원           
       delete from dept5 where deptno=10;   ---> 1행(10번부서) 삭제
       
       select count(*) from emp5;        ---> 14명 사원 (10번부서의 사원들의 deptno가 null로 변경됨)                  

    SQL> select empno, ename, sal, deptno
         from emp5
         where deptno is null;

         EMPNO ENAME                                 SAL     DEPTNO
    ---------- ------------------------------ ---------- ----------
          7782 CLARK                                2450
          7839 KING                                 5000
          7934 MILLER                               1300              

    반응형

    'Database > SQL (oracle, mysql)' 카테고리의 다른 글

    [SQL] SEQUENCE 시퀀스  (0) 2019.05.31
    [SQL] VIEW 란?  (0) 2019.05.31
    [SQL] 무결성 제약조건  (0) 2019.05.30
    [SQL] TCL - ROLLBACK, COMMIT, SAVEPOINT  (0) 2019.05.30
    [SQL] MERGE - 병합  (0) 2019.05.29

    댓글

Designed by Tistory.