외래키는 두 테이블을 서로 연결하는 데 사용되는 키이다.
외래키가 포함된 테이블을 자식 테이블이라 하고 외래키 값을 제공하는 테이블을 부모 테이블이라한다.
외래키 값은 NULL이거나 부모 테이블의 기본키 값과 동일해야 한다.
(참조 무결성 제약조건)
부모 테이블의 기본키, 고유키를 외래키로 지정할 수 있다.
부모 테이블의 기본키, 고유키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정할 수 있다.
CREATE TABLE 테이블이름
(
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
)
Cascade : 부모 데이터 삭제 시 자식 데이터도 삭제
(ORM에서는 보통 Delete쿼리 시 관계가 없더라도 Cascade케이스를 모두 검사해서 대용량 데이터 삭제할 때, 처리가 느리다)
Set null : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Null로 업데이트
Set default : 부모 데이터 삭제 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
Restrict : 자식 테이블이 참조하고 있을 경우, 데이터 삭제 불가
No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.
Casacde : 부모 데이터 업데이트 시 자식 데이터도 업데이트
Set null: 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Null로 업데이트
Set default : 부모 데이터 업데이트 시 자식 테이블의 참조 컬럼을 Default 값으로 업데이트
Restrict : 자식 테이블이 참조하고 있을 경우, 업데이트 불가
No Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택된다.