Foreign Key는 두 테이블을 서로 연결하는 데 사용되는 키이다.
Foreign Key가 포함된 테이블을 자식 테이블이라고 하고 Foreign Key 값을 제공하는 테이블을 부모 테이블이라한다.
외래키 값은 NULL이거나 부모 테이블의 기본키 값과 동일해야한다. (참조 무결성 제약조건)
부모 테이블의 기본키, 고유키를 외래키로 지정할 수 있다.
부모 테이블의 기본키, 고유키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정할 수 있다.
CREATE TABLE `parent` (
`id1` INT(11) NOT NULL,
`id2` INT(11) NOT NULL,
`id3` INT(11) NOT NULL,
`uk1` INT(11) NOT NULL,
`uk2` INT(11) NOT NULL,
`uk3` INT(11) NOT NULL,
PRIMARY KEY (`id1`, `id2`, `id3`),
UNIQUE KEY (`uk1`, `uk2`, `uk3`)
);
CREATE TABLE `child` (
`id` INT(11) NOT NULL,
`id1` INT(11) NOT NULL,
`id2` INT(11) NOT NULL,
`uk1` INT(11) NOT NULL,
`uk2` INT(11) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`id1`, `id2`) REFERENCES `parent` (`id1`, `id2`),
FOREIGN KEY (`uk1`, `uk2`) REFERENCES `parent` (`uk1`, `uk2`)
)
create table department(
id int auto_increment primary key,
name varchar(20) not null,
code char(13) not null unique key
);
create table employee (
id int auto_increment primary key,
name varchar(20) not null,
code char(13) not null unique key,
dept_id int,
foreign key (dept_id) references department(id)
);
department(부서)와 employee(회사원) 테이블이 있다. department이 부모 테이블이고, employee가 자식 테이블이다.
FOREIGN KEY를 가진 테이블이 자식 테이블이고, 참조되는 테이블이 부모 테이블이다.
CONSTRAINT [CONSTRAINT_NAME] FOREIGN KEY (자식 테이블 컬럼 명) REFERENCES 참조테이블(부모 테이블 기본키명) ON UPDATE 옵션 ON DELETE 옵션;
CONSTRAINT [CONSTRAINT_NAME]은 생략이 가능하다.