코딩/다이어리
[MySQL] 제약 조건(constraint) - FOREIGN KEY
헤실
2024. 2. 5. 19:13
제약 조건(constraint)
- 데이터의 무결정을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙
종류
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- DEFAULT
FORIEGN KEY
외래 키. 하나의 테이블을 다른 테이블에 의존하게 만든다.
참조되는 테이블의 필드는 반드시 UNIQUE 나 PRIMARY KEY 제약 조건이 설정되어 있어야 한다.
CREATE 문으로 FOREIGN KEY 생성
CREATE TABLE ChildTable(
ID INT,
ParentID INT,
FOREIGN KEY(ParentID)
REFERENCES ParentTable(ID) ON UPDATE CASCADE
)
// ChildTable의 ParentID는 ParentTable의 ID 필드를 참조한다.
// ParentTable의 ID 필드가 변경되면 ChildTable의 ParentID도 같이 변경된다.
ON DELETE, ON UPDATE
부모 테이블에서 데이터의 수정이나 삭제가 발생할 때, 자식 테이블의 동작을 설정할 수 있다.
ON UPDATE : 부모 테이블의 값이 수정될 경우
ON DELETE : 부모 테이블의 값이 삭제될 경우
+ 함께 설정할 수 있는 동작
- CASCADE: 부모 테이블의 동작을 따라간다. (참조값 삭제-> 참조값 삭제 / 참조값 수정 -> 참조값 수정)
- SET NULL: 부모 테이블에서 참조 받던 필드 값의 변경/삭제시 참조하던 자식 테이블의 필드값을 NULL로 바꾼다.
- NO ACTION: 변경/삭제시에도 데이터에 아무 변경을 가하지 않는다.
- SET DEFAULT: 부모 테이블의 참조값 변경/삭제 시 참조하는 테이블의 데이터는 필드의 기본값(DEFAULT)설정.
- RESTRICT: 참조하는데이터(자식테이블Field)가 남아있으면 참조되는데이터(부모테이블Field) 수정/삭제 불가.
CREATE TABLE ChildTABLE(
ID INT,
ParentID INT,
FOREIGN KEY (ParentID)
REFERENCES ParentTABLE(ID) ON UPDATE CASCADE
ON DELETE RESTRICT
);
// ChildTABEL의 ParentID는 ParentTABLE의 ID 값을 참조하는데,
// ParentTABLE의 ID 값이 변경될때는 수정사항을 따라가고,
// ParentTABLE의 ID 값의 삭제는 막는다.