1. alter table 테이블명 disable constraint 제약조건명;
2. alter table 테이블명 enable validate constraint 제약조건명;
3. alter table 테이블명 enable novalidate constraint 제약조건명;
 
1번의 경우 제약조건 비활성화한다.

2, 3번의 경우 제약조건을 활성화시키라는 건데

기존데이터의 제약조건 위배 여부를 체크할지 말지에 따라 다르게 사용된다.

2번의 경우 제약조건 활성화시 기존에 있던 데이터의 제약조건 위배사항도 함께 체크하여
위배되는 데이터가 있을시 활성화되지 않는다.
3번의 경우 기존에 있던 데이터의 제약조건 위배사항은 체크하지 않기 때문에
활성화하려는 제약조건에 위배되는 기존데이터가 있더라도 정상적으로 활성화가 가능하다.


일반적으로 정합성을 지키기 위해서는 2번을 사용해야 할 것 같지만
3번을 사용하는 경우는 언제인지 모르겠다...

disable도 기존데이터 체크여부를 지정할 수 있지만 novalidate만 가능하다.
아무것도 지정하지 않으면 novalidate가 기본값이기 때문에 명시적으로 선언이 가능하나
validate의 경우 구문에러를 발생시킨다. 

'밥벌이 > Database' 카테고리의 다른 글

Redo와 Undo  (0) 2015.09.23
[Oracle] null 값 순위변경  (0) 2015.09.18
[Oracle] 외래키 옵션  (0) 2015.09.18
[Oracle] MERGE 구문  (0) 2015.09.18
[Oracle] 계층쿼리  (0) 2015.09.18
Posted by mypiece
,