본문 바로가기
IT 이론/데이터베이스

[데이터베이스] Referenced Table을 만들 때의 속성

by 지식id 2013. 1. 12.
반응형

REFERENCES referenced_table [(referenced_columns)]
[ON_DELETE { RESTRICT | NO ACTION | CASCADE | SET NULL | SET DEFAULT}]
[ON_UPDATE { RESTRICT | NO ACTION | CASCADE | SET NULL | SET DEFAULT}]

RESTRICT(default) : 피참조 테이블에서 행을 삭제 또는 수정하기 전에, 참조테이블에서 삭제될 행을 참고하고 있거나 변경될 행의 이전 값을 참조하고 있으면 오류로 처리하고 그렇지 않으면 삭제 또는 수정을 행한다.

NO ACTION : 피참조 테이블에서 행을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건을 위배하지 않으면 그대로 두고, 무결성 제약조건을 위배하면 오류로 처리하고 다시 되돌린다.
(먼저 삭제/수정 -> 제약 검사 -> 복구 or 유지 하는 방식. 옛날 방식이며 요즘은 거의 쓰이지 않는다.)

위 두 경우 내부적으로 processing이 다른 것이지 겉으로 보이는 결과는 같다.
어떤 직원 테이블의 한 행이 Foreign키로 부서 번호를 참조하고 있으면, 부서 테이블의 해당 부서는 부서 번호를 바꿀 수 없다.


CASCADE : 피참조 테이블에서 행을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 삭제 또는 수정을 행한다.

ex) 부서 번호 변경시 직원 테이블에서 참조하고 있던 값이 수정되고, 부서 삭제시 직원 또한 삭제된다.

SET NULL : 피참조 테이블에서 행을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 NULL로 바꾼다. 단, 참조하는 칼럼에 NOT NULL 제약이 선언되어 있다며 오류로 처리한다.

ex) 부서 번호 변경 또는 삭제시 직원 테이블에서 참조하고 있던 값이 NULL로 바뀐다.

SET DEFUALT : 피참조 테이블에서 행을 삭제 또는 수정한 후, 참조 테이블에서 무결성 제약조건에 따라 default 값으로 바꾼다. 만약 참조 테이블의 외래키가 default 값을 가지지 않으면 NULL 값을 default 값으로 한다. 단, 참조하는 칼럼에 defualt 값이 선언되어 있지 않고 NOT NULL 제약이 선언되어 있다면 오류로 처리한다.

ex) 부서 번호 변경 또는 삭제시 직원 테이블에서 참조하고 있던 값이 default로 바뀐다. 예를 들면 '대기 부서'나 '미발령 상태'를 나타내는 값으로 자동으로 바뀌게 할 수 있다. 이런 default 값이 없으면 SET NULL과 같다.

반응형

댓글