Foreign Key를 활용하기 위해서 테이블을 하나 더 생성했다.
그리고, 두 테이블을 참조할 수 있도록 만들기 위해 Category Table(부모 테이블)의 idcategory(Primary Key)와 Customer Table(자식 테이블)의 category(Foreign Key)를 연결한다.
먼저, 외래 키를 지정해주기 위해 Customer 테이블의 설정(테이블에서 오른쪽 마우스를 누르면 도구 모양의 아이콘)에 들어가서 하단의 foreign keys를 선택한다.
다음으로, foreign key의 이름을 원하는 대로 설정하고, [Referenced Table]에 부모 테이블을 설정한다.
[Column]에서 foreign key로 사용할 열(Column)을 선택하고 [Referenced Column]에 부모 테이블에서 참조당하는 Primary key를 선택한다.
- On Update는 데이터를 업데이트할 때의 설정이다.
- RESTRICT/ NO ACTION: 제한이 걸리는 조건으로 foriegn key로 연결되어 있으면 변경할 수 없도록 error가 발생한다.
- CASCADE: 부모 테이블의 primary key가 변경되면 연결되어 있는 자식 테이블의 foriegn key도 함께 변경된다.
- SET NULL: 부모 테이블의 primary key가 변경되면 자식 테이블의 foriegn key가 NULL 값으로 변경된다.
- On Delete는 데이터를 삭제할 때의 설정으로 각 설정이 On Update와 같은 역할을 한다.
- RESTRICT/ NO ACTION: 제한이 걸리는 조건으로 foriegn key로 연결되어 있으면 삭제할 수 없도록 error가 발생한다.
- CASCADE: 부모 테이블의 primary key가 삭제되면 연결되어 있는 자식 테이블의 foriegn key도 함께 삭제된다.
- SET NULL: 부모 테이블의 primary key가 삭제되면 자식 테이블의 foriegn key가 NULL 값으로 변경된다.
UPDATE category SET idcategory = 111
WHERE idcategory = 101;
RESTRICT/ NO ACTION 예시
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`food_guide`.`customer`, CONSTRAINT `category_fkey` FOREIGN KEY (`category`) REFERENCES `category` (`idcategory`) ON DELETE RESTRICT ON UPDATE RESTRICT)
UPDATE category SET idcategory = 222
WHERE idcategory = 102;
설정을 완료하면 APLLY를 누른다. 만약 쿼리를 작성해서 foreign key를 만들고 싶으면 아래와 같이 입력한다.
ALTER TABLE `food_guide`.`customer`
ADD INDEX `category_fkey_idx` (`category` ASC) VISIBLE;
;
ALTER TABLE `food_guide`.`customer`
ADD CONSTRAINT `category_fkey`
FOREIGN KEY (`category`)
REFERENCES `food_guide`.`category` (`idcategory`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;
- Foreign Key 삭제
Foreign Key를 삭제하고 싶다면, 아래와 같이 작성하여 삭제한다.
ALTER TABLE customer
DROP FOREIGN KEY category_fkey;
'Database > MySQL' 카테고리의 다른 글
[Programming][MySQL] 데이터 정규화(제1 정규화, 제2 정규화, 제3 정규화, 비정규화) (0) | 2021.08.16 |
---|---|
[Programming][MySQL] 데이터 모델링(ERM/ ERD) (0) | 2021.08.13 |
[Programming][MySQL] 테이블 가공하기(ALTER) (0) | 2021.08.04 |
[Programming][MySQL] 테이블 만들기(CREATE DATABASE/ CREATE TABLE/ INSERT INTO/ DELETE FROM) (0) | 2021.08.02 |
[Programming][MySQL] 서브쿼리 (feat. KOSPI50 종목) (0) | 2021.07.28 |
댓글