본문 바로가기

MySQL

MySQL - foreign key


create table에서 foregin key를 이용하는 방법입니다. test2 테이블을 만들 때 test 1의 테이블을 참조해서 customer_ID를 작성하였습니다. 만약에 참조할 상위 필드에 제약조건이 없다면 에러가 발생합니다. (error code 1822) 문법은 다음과 같습니다.

ALTER TABLE Reservation ADD CONSTRAINT CustomerID # 제약조건 이름

FOREIGN KEY (ID) REFERENCES Customer (ID);


위 예제는 test1 , roomNum에서 제약조건이 없기 때문에 unique를 걸어준 후 test2에 참조하도록 alter table을 이용했습니다. 다음은 결괏값입니다.

다음은 주어진 제약조건을 제거하는 방법입니다. 제약조건 이름을 정의해 주어야 제거가 가능합니다. 예제에서 제약조건 이름을 정의하지 않았기 때문에 아래 방법을 이용한다면 error code 1091을 만나게 됩니다.

ALTER TABLE 테이블이름

DROP FOREIGN KEY 제약조건이름 

 

on delete와 on update 구문이 있다고 하는데 8 버전 중 최신 버전에서 on delete 구문은 확인되지 않습니다. 다음은 옵션입니다. tcp school에서 가져왔습니다.

1. CASCADE : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.
2. SET NULL : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.
3. NO ACTION : 참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.
4. SET DEFAULT : 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.
5. RESTRICT : 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.

필요에 의해서 위 옵션들을 이용하면 될 것 같습니다. 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL - index, view, group by  (0) 2021.08.19
MySQL - join, union, sub-query  (0) 2021.08.18
MySQL - constraint  (0) 2021.08.14
MySQL - pattern matching  (0) 2021.08.13
MySQL - alter, drop, select  (0) 2021.08.11