ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 제약조건 Foreign Key
    Data Base_Oracle/SQL 2020. 1. 4. 16:27

    Foreign Key_외래키

    참조 무결성 강화 규칙, 연관된 테이블의 필드 레코드를 참조해서 값이 있으면 데이터 저장을 허용하고, 그렇지 않으면 에러를 유발시켜서 올바른 값이 저장되도록 설정하는 제약조건

    § 형식

    [ SQL> alter table 수정table명 add constraint 제약조건이름
    foreign key(자기 테이블의 필드명) references 참조테이블명(참조할 필드명); ]

    # 예제

    ▶ dept_부서 테이블 생성
    [ SQL> create table dept(deptno number primary key, dname varchar2(20) not null, loc varchar2(15) not null );
    SQL> insert into dept values(10, '영업부', '서울');
    SQL> insert into dept values(20, '개발부', '대전');
    SQL> insert into dept values(30, '총무부', '마산'); ]

     

    ▶ sawon_사원 테이블 생성
    [ SQL> create table sawon(id number primary key, name varchar2(20) not null, deptno number);
    insert into sawon values(1, '홍길동', 10);
    insert into sawon values(2, '테스트', 40); ]
    ※ 부서번호가 40이 없음에도 불구하고 데이터가 저장됨

    # 에러

    ▷ 외래키 설정 → 에러 발생
    [ SQL> alter table sawon add constraint sawon_fk_deptno foreign key(deptno)
    references dept(deptno);
    1행에 오류:
    ORA-02298: 제약 (TEST1.SAWON_FK_DEPTNO)을 사용 가능하게 할 수 없음 - 부모 키가 없습니다 ]
    ※ 사원 테이블에 부서번호 40인 데이터가 저장되어 있기 때문에 발생하는 에러
    40번을 삭제하거나 수정해야 함

     

    ▶ 부서번호 40이 저장되어 있는 로우 삭제
    [ SQL> delete from sawon where id=2; ]

    ▷ 부서번호 40을 20으로 변경해도 됨
    [ SQL> update sawon set deptno=20 where id=2; ]

     

    ▶▶ foreign key 설정

    [ SQL> alter table sawon add constraint sawon_fk_deptno foreign key(deptno)
    references dept(deptno);
    테이블이 변경되었습니다. ]

     

    ▶ 부서번호 40 입력 → 에러 발생
    [ SQL> insert into sawon values(2, '테스트', 40);
    1행에 오류:
    ORA-02291: 무결성 제약조건(TEST1.SAWON_FK_DEPTNO)이 위배되었습니다- 부모 키가 없습니다. ]
    ※ dept 테이블의 deptno 필드에 40이 없기 때문에 오류를 발생시킴

     

    ▶ 부서번호 30인 레코드 입력
    [ SQL> insert into sawon values(2, '테스트', 30);
    SQL> select * from sawon; ]

    IDNAMEDEPTNO
    1홍길동10
    2테스트30

    foreign key를 사용하면 하위 테이블의 데이터를 상위(참조) 테이블의 데이터에 대조해서 저장할 수 있기 때문에

    조금 더 꼼꼼한 데이터 관리가 가능할 것입니다.

    'Data Base_Oracle > SQL' 카테고리의 다른 글

    SQL_Join 개요 & Cross Join  (0) 2020.01.06
    SQL_Constraint Enable / Disable  (0) 2020.01.06
    SQL 제약조건 Check & Default  (0) 2020.01.04
    SQL 제약조건 Primary Key & Unique  (0) 2020.01.04
    SQL 제약조건(Constraint) 종류 및 개요  (0) 2020.01.04

    댓글

Designed by Tistory.