-
SQL 제약조건 Foreign KeyData 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; ]ID NAME DEPTNO 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