SQL/RDBMS

[Oracle] 제약 조건 (조회, 추가, 수정, 삭제)

dddzr 2023. 3. 16. 14:55

조회

SELECT *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = '{테이블명}'

* 위 쿼리를 실행했을 때 결과

select시 조회되는 컬럼

여기서 CONSTRAINT_NAME이 제약조건이름이고

SEARCH_CONDITION이 제약조건이다.

 

추가

ALTER TABLE {테이블명} ADD CONSTRAINT {제약조건명} {제약조건}

* 제약조건 예시

CHECK(COL1 IN ('A','B','C'))
"COL1" IS NOT NULL

컬럼 데이터타입이 number(float, decimal...)인 경우에는 IN (1~9)가 아니라 BETWEEN을 써야함.

CHECK(COL1 BETWEEN 1.0 AND 9.0)

 

*ORA-02293: ()을 검증할 수 없습니다 - 잘못된 제약을 확인합니다

참고로 추가, 수정하고자 하는 제약조건에 위반되는 데이터가 존재하면 이런 에러가 뜬다.

 

수정

ALTER TABLE {테이블명} MODIFY {컬럼명} {제약조건}

 

근데 MODIFY로는 NULL제약조건만 수정할 수 있다!!

ALTER TABLE {테이블명} MODIFY {컬럼명} NOT NULL;
ALTER TABLE {테이블명} MODIFY {컬럼명} NULL;

실제로 다른 조건을 수정하려고 하면 새로 추가되기 때문에

제약조건을 삭제하고 추가하는 방법으로 수정해야 한다.

 

삭제

ALTER TABLE {테이블명} DROP CONSTRAINT {제약조건명}

 

제약조건 이름 변경

ALTER TABLE {테이블명}
RENAME CONSTRAINT {기존 제약조건명} TO {변경할 제약조건명}

 

제약 활성화/비활성화

--제약 비활성화
ALTER TABLE {테이블명} DISABLE {제약조건명}
--제약 활성화
ALTER TABLE {테이블명} ENABLE {제약조건명}