참조 무결성 제약
IT위키
더 많은 작업
- Relational Integrity Constraint
| 기능 | 구분 |
|---|---|
| Restrict |
|
| Cascade |
|
| Nullify |
|
| Default |
|
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.0 1.1 「CREATE TABLE - REFERENCES」, PostgreSQL Documentation, https://www.postgresql.org/docs/current/sql-createtable.html, 확인일: 2026-11-04.