[Oracle] 오라클 컬럼 CHECK 제약조건 추가, 삭제 방법
- 데이터베이스/오라클
- 2025. 9. 28.
오라클에서 테이블 칼럼의 값을 특정 조건으로 제한하고 싶을 때는 CHECK 제약조건을 사용한다. ALTER TABLE 명령어를 통해 기존 테이블에도 CHECK 제약조건을 추가하거나 삭제할 수 있다. CHECK 제약조건이 추가된 이후에 해당 조건을 위반하는 값을 INSERT 하거나 UPDATE 하려고 하면 "ORA-02290: 체크 제약조건이 위배되었습니다" 오류가 발생한다.
| 목차 |
컬럼 CHECK 제약조건 추가 방법
ALTER TABLE scott.emp ADD CONSTRAINT sal_ck CHECK(sal > 0);
ALTER TABLE [스키마명].[테이블명] ADD CONSTRAINT [제약조건명] CHECK([제약조건])
위의 CHECK 제약조건( sal > 0 )을 설정하면 sal 칼럼에 0 이하의 값이 입력되면 오류가 발생한다.
제약조건명( sal_ck )은 사용자가 임의의 이름을 부여하면 된다.
![]() |
여러 개의 CHECK 조건을 부여할 때 주의 사항
![]() |
CHECK(job = 'MANAGER' AND sal > 0) 조건을 보면 MANAGER이고 sal 값이 0 이상만 허용하는 의미로써 겉으로 보면 논리적으로 보인다. 그러나 MANAGE가 아닌 경우 모두 FALSE를 반환하므로 데이터에 문제가 발생할 수 있다.
위의 예제는 아래와 같이 사용하면 오류가 발생하지 않는다.
-- job = 'MANAGE'일 때만 sal > 0 체크 (OR 연산자를 사용하여 하나만 만족해도 TRUE)
ALTER TABLE scott.emp ADD CONSTRAINT sal_ck CHECK (job != 'MANAGER' OR sal > 0);
-- job != 'MANAGE'일 경우 FALSE가 발생하는데, NOT사용하여 TRUE 반환
ALTER TABLE scott.emp ADD CONSTRAINT sal_ck CHECK(NOT(job = 'MANAGER' AND sal <= 0));
컬럼 CHECK 제약조건 제거 방법
ALTER TABLE scott.emp DROP CONSTRAINT sal_ck;
ALTER TABLE [스키마명].[테이블명] DROP CONSTRAINT [제약조건명]
테이블 생성 시 CHECK 제약조건 설정 방법
CREATE TABLE scott.emp
(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2)
)
테이블을 사용할 때 CHECK 제약조건을 설정할 수 있다. 위의 방법은 CHECK 제약조건명을 설정하지 않았으므로 제약조건명을 오라클에서 임의로 부여한다. (예, SYS_C0012345)
CREATE TABLE scott.emp
(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2)
)
위의 방법은 CHECK 제약조건을 설정할 때 제약조건명을 명시하여 설정하는 방법이다.
CREATE TABLE scott.emp
(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
CONSTRAINT sal_ck CHECK (sal > 0)
)
CHECK 제약조건은 컬럼명 뒤에 설정해도 되지만 CREATE TABLE 구문의 하단에 입력해도 동일하게 제약조건이 생성된다.

