라라리라

[MySQL] 제약 조건(constraint) - FOREIGN KEY 본문

코딩/다이어리

[MySQL] 제약 조건(constraint) - FOREIGN KEY

헤실 2024. 2. 5. 19:13

제약 조건(constraint)

  • 데이터의 무결정을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙

종류

  1. NOT NULL
  2. UNIQUE
  3. PRIMARY KEY
  4. FOREIGN KEY
  5. 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 값의 삭제는 막는다.