SQL - 제약조건 PK(Primary Key), FK(Foreign Key)

김두나·2023년 8월 28일

데이터베이스

목록 보기
3/6

PK(Primary Key), FK(Foreign Key)는 테이블의 필수요소로 모든 테이블은 이 둘중 하나 이상을 반드시 포함해야 한다.

No.1

Primary Key

Primary key설정

CREATE TABLE 테이블(
...
CONSTRAINT 제약조건이름 PRIMARY KEY(컬럼)
);

CREATE TABLE 테이블(
컬럼 데이터 타입 CONSTRAINT 제약조건이름 PRIMARY KEY,
...
);

  • 테이블을 하나 생성할 때 PK를 정의
  • PK는 각 행을 고유하게 식별하는 역할을 함
  • 테이블당 하나만 정의 가능
  • 지정된 칼럼에는 중복된 값이나 NULL값이 입력될 수 없음
    -> NOT NULL + UNQUE(UK)를 한 것과 같은 기능
  • PK로 지정가능한 컬럼이 여러개 있을 경우 검색에 많이 사용되고 간단하고 짧은 컬럼을 지정
  • 주 식별자, 주키 등으로 불림
  • 고유 인덴스(Unique index)가 자동 생성

create table dept(
dno varchar2(14),
dname varchar2(14),
loc varchar2(8),
director varchar2(4),
constraint dept_dno_pk primary key (dno)
);

create table dept(
dno varchar2(2) constraint dept_dno_pk primary key.
dname varchar2(14),
loc varchar2(8),
director varchar2(4),
);

No.2

FOREIGN KEY(FK)

Foreign key 설정

CREATE TABLE 테이블(
...
CONSTRAINT 제약조건이름 FOREIGN KEY(컬럼)
REFERENCES 참조할테이블 (참조할컬럼)
[ ON DELETE CASCADE | ON DELETE SET NULL]
);

CREATE TABLE테이블(
컬럼 데이터타입 CONSTRAINT 제약조건이름
FOREIGN KEY
REFERENCES 참조할테이블(참조할컬럼)
[ ON DELETE CASCADE | ON DELETE SET NULL]
);

  • 테이블을 생성할 때 FK 지정
  • FK가 정의된 테이블이 자식 테이블
  • 참조되는 테이블이 부모 테이블
  • 부모 테이블은 미리 생성되어 있어야 함
  • 부모 테이블의 참조되는 컬럼에 존재하는 값만 입력할 수 있음
  • 부모 테이블은 FK로 인해 삭제 불가능
  • REFERENCES : 참조할 부모 테이블과 부모 테이블이 있는 컬럼 정의
  • ON DELETE CASCADE : 부모테이블의 행이 지워지면, 자식테이블 행도 함께 삭제
  • ON DELETE SET NULL :부모 테이블 행이 지워지면 자식 테이블의 행은 NULL 값으로 설정
  • 데이터 타입은 반드시 일치해야 함
  • 참조되는 컬럼은 PK이거나 UK(Unique key)만 가능
  • 외부키, 참조키, 외부 식별자 등으로 불림

일반적으로 데이터 베이스를 설계할 때 자식 테이블의 FK 컬럼은 부모 테이블의 참조되는 컬럼과 같은 이름을 사용(테이블 간의 관계를 한번에 알아볼 수 있기 때문)

0개의 댓글