쌓고 쌓다

[Oracle] 무결성 제약조건 삭제 / 활성화 / 비활성화 본문

프로그래밍/SQL

[Oracle] 무결성 제약조건 삭제 / 활성화 / 비활성화

승민아 2022. 12. 10. 11:43

무결성 제약조건 삭제

ALTER TABLE table_name
DROP CONSTRAINT constraint_name [CASCADE];
  • 부모 테이블의 기본키 무결성 제약조건을 삭제할때 이것을 참조하는 테이블이 있다면?
    • 참조하는 테이블을 먼저 삭제한 후 삭제하거나 CASCADE 옵션을 이용하여 삭제되는 칼럼을 참조하는 참조 무결성 제약조건도 함께 삭제한다.

 

EX) subject 테이블의 subject_term_ck 무결성 제약조건 삭제

ALTER TABLE subject
DROP CONSTRAINT subject_term_ck;

 

EX) subject_no_pk 무결성 제약조건 삭제

이 기본키는 외부 키에 의해 참조되고 있다. 그냥 지우려 한다면

고유/기본 키가 외부 키에 의해 참조되었습니다. 라며 삭제가 안된다.

이는 이 기본 키를 외부 테이블에서 참조하고 있기 때문이다.

그래서 참조키를 먼저 삭제하고 이 기본키를 삭제하거나

CASCADE 옵션을 사용하여 외래 키와 참조 키를 함께 삭제해야한다.

ALTER TABLE subject
DROP CONSTRAINT subject_no_pk CASCADE;

 

무결성 제약조건 비활성화

비활성화는 대용량 데이터를 초기에 입력할때 사용한다.

왜냐하면 제약조건의 위반 여부를 검사하는 과정으로 인해 처리 시간이 오래 걸리기 때문이다.

이럴때 기존의 무결성 제약조건을 비활성화하여 데이터를 입력한다.

ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name [cascade];

 

EX) sugang_pk, sugang_studno_fk 무결성 제약조건 비활성화

ALTER TABLE sugang
DISABLE CONSTRAINT sugang_pk;

ALTER TABLE sugang
DISABLE CONSTRAINT sugang_studno_fk;

 

제약조건 활성화/비활성화 상태 조회

SELECT constraint_name, status
FROM user_constraints
WHERE table_name IN ('SUGANG', 'SUBJECT');

 

무결성 제약조건 활성화

ALTER TABLE table_name
ENABLE [NOVALIDATE] CONSTRAINT constraint_name [CASCADE];

NOVALIDATE

: 기존 데이터에 대해서는 제약조건을 적용하지 않고, 새로 입력되는 데이터, 수정하는 데이터에 대해서 제약조건을 검사

 

EX) 수강 테이블의 sugang_pk, sugang_studno_fk 무결성 제약조건 활성화

ALTER TABLE sugang
ENABLE CONSTRAINT sugang_pk;

ALTER TABLE sugang
ENABLE CONSTRAINT sugang_studno_fk;

 

상태 조회

SELECT constraint_name,constraint_type, status
FROM user_constraints
WHERE table_name = 'SUGANG';

Comments