본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Relational Integrity Constraint
기능 구분
Restrict
  • 부모 테이블의 참조 대상 키가 삭제 또는 변경되는 것을 불허
  • 자식 테이블의 참조값을 변경하는 경우, 부모 테이블에 있는 참조 대상 키가 있는 경우만 허용
Cascade
  • 부모 테이블의 참조 대상 키가 삭제되면 자식 테이블의 참조 튜플 삭제
Nullify
  • 부모 테이블의 참조 대상 키가 삭제되면 자식 테이블의 참조값을 Null로 변경
Default
  • 부모 테이블의 참조 대상 키가 삭제되면 미리 정의한 Default 값으로 변경

SQL 의 참조 동작

편집 원본 편집

SQL 에서는 외래 키를 선언할 때 ON DELETE(부모 행 삭제 시)와 ON UPDATE(부모 키 변경 시)에 각각 동작을 지정한다. 지정하지 않으면 NO ACTION(위의 Restrict 와 같은 효과)이다.[1]

지정 부모 행이 삭제될 때(ON DELETE) 부모 키가 바뀔 때(ON UPDATE)
NO ACTION / RESTRICT 참조하는 자식이 있으면 삭제를 거부 참조하는 자식이 있으면 변경을 거부
CASCADE 자식 행도 함께 삭제 자식의 외래 키 값도 새 값으로 바뀜
SET NULL 자식의 외래 키를 NULL 로 자식의 외래 키를 NULL 로
SET DEFAULT 자식의 외래 키를 열의 기본값으로(자식 행은 남는다) 자식의 외래 키를 기본값으로
  • 삭제와 변경의 동작은 따로 정한다. ON DELETE SET DEFAULT ON UPDATE CASCADE 라면 부모가 삭제될 때는 자식 값이 기본값으로 바뀔 뿐 자식 행은 지워지지 않고, 부모 키가 바뀔 때만 새 값을 따라간다.
  • SET DEFAULT 로 바뀐 기본값도 부모 테이블에 있는 키여야 한다. 없으면 제약 위반으로 작업이 실패한다.[1]
  • 같은 테이블을 참조하는 외래 키(자기 참조)도 같다. 직원(ENO, Super_ENO) 에서 FOREIGN KEY (Super_ENO) REFERENCES 직원(ENO) ON DELETE SET NULL ON UPDATE CASCADE 이면, 상사가 삭제되면 부하의 Super_ENO 가 NULL 이 되고, 상사의 직원번호가 바뀌면 부하의 Super_ENO 도 새 번호로 바뀐다.
CREATE TABLE EMPLOYEE (
  ENO INT NOT NULL, Super_ENO INT, DNO INT NOT NULL DEFAULT 1,
  PRIMARY KEY (ENO),
  FOREIGN KEY (Super_ENO) REFERENCES EMPLOYEE(ENO) ON DELETE SET NULL ON UPDATE CASCADE,
  FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNO) ON DELETE SET DEFAULT ON UPDATE CASCADE);
  1. ↑ 1.0 1.1 「CREATE TABLE - REFERENCES」, PostgreSQL Documentation, https://www.postgresql.org/docs/current/sql-createtable.html, 확인일: 2026-11-04.