본문 바로가기

IT관련

오라클 PK(Primary Key), FK(Foreign Key) 예제

오라클 DB에서 주키(Primary Key), 외래키(Foreign Key) 만드는 샘플을 소개합니다.

PK, FK 만드는 예제는 아주 많은데, 주의할 부분이 있어서 추가해서 다시 정리해봤습니다.

 

PK 만드는 구문과 샘플은 아래와 같습니다.

 


-- 구문(Syntax)
alter table {테이블명}
add constraint {PK명} primary key ({PK키컬럼});


-- 예제(Example)
create table PARENT as select * from scott.DEPT;

alter table PARENT
add constraint PK_PARENT primary key (deptno);

 

PK를 만들면 인덱스도 같은 이름으로 만들어집니다.

하지만, FK의 경우는 인덱스가 자동으로 만들어지지 않고, FK Constraint 만 만들어집니다.

따라서 인덱스를 수동으로 만들어줘야 합니다.

 

아래는 FK 만드는 구문과 샘플입니다.

 


-- 구문(Syntax)
alter table {테이블명}
add constraint {FK명} foreign key ({FK키컬럼}) references {부모테이블}({부모테이블PK});

create index {FK명} on {테이블명}({FK키컬럼});


-- 예제(Example)
create table CHILD as select * from scott.EMP;

alter table CHILD
add constraint FK_CHILD foreign key (deptno) references PARENT(deptno);

create index FK_CHILD on CHILD(deptno);

 

FK 만들때, 인덱스를 만들어주지 않으면, 당장 문제가 되지는 않습니다.

하지만, 부모테이블과 자식테이블이 서로 Join 해서 쓰는 경우가 많은데, 이때 인덱스가 없어서 Full Table Scan 을 하게 되는 경우가 종종 발생할 수 있습니다.

 

 

FK 만들때 또 주의할 점은 반드시 부모테이블에 PK를 먼저 만들어야 한다는 것입니다.

부모테이블에 PK 가 없는 상태에서 자식테이블에 FK 를 만들려고 하면 ORA-02270 에러가 발생합니다.

 

 

또, 테이블을 삭제하는 경우에는 자식테이블부터 삭제해야 합니다.

자식테이블이 있는 상태에서 부모테이블을 먼저 삭제하려고 하면, ORA-02449 에러가 발생합니다.