오라클 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 에러가 발생합니다.
'IT관련' 카테고리의 다른 글
오라클 SQL문에서 like 문 처리 샘플 ( %, _ ) (0) | 2019.12.13 |
---|---|
Oracle Text (오라클 텍스트) - "like" SQL문 빠르게 하는 방법 (2) | 2019.12.13 |
(12cR1 신기능) 오라클 Scalar Subquery Unnesting (_optimizer_unnest_scalar_sq) (0) | 2019.12.11 |
Oracle 무료 DB관리툴 ((EM Express)) - 포트변경, http 로 접속 설정 방법 (0) | 2019.12.11 |
Oracle 무료 DB관리툴 SQL Developer - Plan/Trace 확인하기 (실행계획/트레이스) (0) | 2019.12.11 |