DB/mysql

FOREIGN KEY ?

이건욱 2020. 4. 23. 14:41

FOREIGN KEY는 두 개의 테이블에 대해서 링크를 걸 수가 있습니다.

 

자식 테이블은 부모 테이블의 기본키를 참조하고 있습니다.

따라서 테이블에서 추가를 했을 때 제약조건을 설정할 수가 있습니다.

 

[예시]

CREATE TABLE `parent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_count` int(11),
  PRIMARY KEY (`id`)
);

CREATE TABLE `child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `child_count` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`parent_id`) REFERENCES `parent`(`id`)
)

위와 같은 예시에서는 child Table에서 parent_id가 parent table 에서 id를 참조 하고 있습니다.

 

따라서 child 테이블에 INSERT 했을 때 parent_id가 parent에 존재 하지 않는 값이면 에러가 납니다.

 

만약에 이름을 지정해주고 싶으실 경우에서는 다음과 같이 할수가 있습니다.

CREATE TABLE `child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `child_count` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT fk_child FOREIGN KEY (`parent_id`) 
  REFERENCES `parent`(`id`)
)

 

테이블을 이미 생성했을 때에는 다음과 같이 진행 할수 있습니다.

ALTER TABLE child
ADD CONSTRAINT fk_child FOREIGN KEY (`parent_id`) 
REFERENCES `parent`(`id`);

 

외래키를 삭제 하고 싶은 경우에는 다음과 같이 진행 할수 있습니다.

ALTER TABLE child
DROP FOREIGN KEY fk_child;