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
,

1. 부모키 삭제시 자식키를 null로 update


alter table 테이블명 add constraint 제약조건명

foregin key (외래키지정로 지정할 칼럼명)

references 참조할테이블명(참조할칼럼명)

on delete set null; 


---------------------------------------------------


2. 부모키 삭제시 자식키 레코드도 함께 삭제


alter table 테이블명 add constraint 제약조건명

foregin key (외래키지정로 지정할 칼럼명)

references 참조할테이블명(참조할칼럼명)

on delete cascade;

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

[Oracle] null 값 순위변경  (0) 2015.09.18
[Oracle] 제약조건 활성화/비활성화  (0) 2015.09.18
[Oracle] MERGE 구문  (0) 2015.09.18
[Oracle] 계층쿼리  (0) 2015.09.18
[Oracle] 답변형 게시판 구현 로직  (0) 2015.09.18
Posted by mypiece
,
 MERGE

- MERGE문은 특정 테이블에 대해 조건에 따라 삽입,갱신,삭제 작업을 한번에 처리할 수 있다.

 

merge
into t_test A
using (select 13 no from dual) B
on (A.no = B.no)
when matched then
  update set name = '개발자133'
  delete where (parent_no = 3)
when not matched then
  insert (no, name, parent_no)
  values(14, '개발자14', 3);

 

 

- INTO : DATA UPDATE되거나 INSERT 될 테이블 또는 뷰를 지정.

- USING : 비교할 테이블 또는 뷰를 지정.

  자기자신(INTO절에서 정의한 뷰 또는 테이블)과 비교하려면 아래와 같이 

  using dual 구문을 사용하도록한다.

merge
into t_test A
using dual

on (A.no = 13)
when matched then
  update set name = '개발자133'
  delete where (parent_no = 3)
when not matched then
  insert (no, name, parent_no)
  values(14, '개발자14', 3);

- ON : 비교할 조건을 명시 

- WHEN MATCHED : ON 조건절이 TRUE ROW에 수행 할 작업을 명시

  * update, delete만 명시 가능하다.

  * on 절에서 조건으로 사용된 칼럼은 update, delete 대상이 될 수 없다.

  * update절은 단독으로 사용가능하나, delete절은 단독으로 사용할 수 없다.

- WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용

  * insert만 명시 가능하다.

Posted by mypiece
,