반응형
FOREIGN KEY
외래키 역시 PK와 마찬가지로 매우 중요한 제약조건이다.
- 외부키, 외래키, 참조키, 외부 식별자 등으로 불리며 흔히 FK라고도 한다.
- FK가 정의된 테이블을 자식 테이블이라고 칭한다.
- 참조되는 테이블 즉, PK가 있는 테이블을 부모 테이블이라 한다.
- 부모 테이블의 PK 컬럼에 존재하는 데이터만 자식 테이블에 입력할 수 있다.
- 부모 테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다.
- 참조하는 데이터 컬럼과 데이터 타입이 반드시 일치해야 한다.
- 참조할 수 있는 컬럼은 기본키(PK)나 UNIQUE만 가능하다.(보통 PK랑 엮는다.)
제약조건을 추가할 때 사용되는 구문은 다음과 같다.
▷ 구문
CONSTRAINT [제약조건 명] FOREIGN KEY([컬럼명])
REFERENCES [참조할 테이블 이름]([참조할 컬럼])
[ON DELETE CASCADE | ON DELETE SET NULL]
실제 테이블을 선언하면서 사용해보면 다음과 같이 사용할 수 있다.
CREATE TABLE parentTable(
parentPk NUMBER PRIMARY KEY
);
CREATE TABLE consTest(
parentPk NUMBER,
pkCol1 CHAR(8),
CONSTRAINT fk_code FOREIGN KEY(parentPk)
REFERENCES parentTable(parentPk) ON DELETE CASCADE
);
참조할 컬럼과 같은 컬럼이 자식 테이블에 존재해야만 한다.
(굳이 같은 이름을 가진 컬럼일 필요는 없지만 일반적으로는 같은 이름을 가진 컬럼을 선언한다.)
그리고 참조되는 컬럼에 데이터가 먼저 있어야 하기 때문에 자식 테이블에 값을 먼저 넣을 순 없다.
그리고 특이하게도 FK를 선언할 때 사용되는 두 가지 옵션이 존재한다.
ON DELETE CASCADE
참조되는 부모 테이블 행에 대한 DELETE를 허용한다.
즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로 자식 테이블 값 역시 삭제된다는 의미이다.
ON DELETE SET NULL
참조되는 부모 테이블 행에 대한 DELETE를 허용한다.
이건 CASCADE와는 다른데, 부모 테이블의 값이 삭제되면 해당 참조하는 자식 테이블의 값들이 NULL로 설정되는 옵션이다.
일반적으로 ON DELETE CASCADE 옵션을 많이 사용한다.
해당 옵션을 사용하지 않으면 엮여있는 모든 자식 테이블의 값을 먼저 다 지워줘야 하기 때문이다.
반응형
댓글