⑤ CHECK
마지막으로 알아볼 제약조건으로 CHECK가 있다. 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.
CONSTRAINT 체크명 CHECK(체크조건)
입력
CREATE TABLE ex2_9 (
num1 NUMBER
CONSTRAINTS check1 CHECK ( num1 BETWEEN 1 AND 9),
gender VARCHAR2(10)
CONSTRAINTS check2 CHECK ( gender IN ('MALE', 'FEMALE'))
);
결과
table EX2_9 이(가) 생성되었습니다.
입력
SELECT constraint_name, constraint_type, table_name, search_condition
FROM user_constraints
WHERE table_name = 'EX2_9';
결과
CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME SEARCH_CONDITION
--------------- --------------- ---------- ----------------------------
CHECK1 C EX2_9 num1 BETWEEN 1 AND 9
CHECK2 C EX2_9 gender IN ('MALE', 'FEMALE')
ex2_9 테이블에서 num1 컬럼은 1에서 9까지의 숫자만, gender 컬럼은 ‘MALE’, ‘FEMALE’ 두 값만 넣을 수 있도록 제약조건을 만들었다. 제약조건에 위배되는 데이터를 넣어 보자.
입력
INSERT INTO ex2_9 VALUES (10, 'MAN');
결과
SQL 오류: ORA-02290: 체크 제약조건(ORA_USER.CHECK2)이 위배되었습니다.
예상했듯이, 오류가 발생한다. 조건에 맞는 데이터를 넣어 보자.
입력
INSERT INTO ex2_9 VALUES (5, 'FEMALE');
결과
1개 행 이(가) 삽입되었습니다.
제약조건에는 포함되지 않지만, 컬럼 속성 중 하나로 DEFAULT라는 것이 있다. 이는 컬럼의 디폴트 값을 명시하는데 사용된다. 예를 들어, 테이블에 CREATE_DATE란 컬럼이 있다고 가정해 보자. 이 컬럼은 해당 로우가 입력된 날짜와 시간 정보를 입력할 용도로 만들었는데, 데이터를 입력할 때마다 CREATE_DATE에 값을 넣는 것은 여간 귀찮은 일이 아니다. 이때 테이블 DDL문에서 컬럼 속성에 DEFAULT 디폴트 값 형식으로 기술하면 자동으로 디폴트 값이 들어 간다.
입력
CREATE TABLE ex2_10 (
Col1 VARCHAR2(10) NOT NULL,
Col2 VARCHAR2(10) NULL,
Create_date DATE DEFAULT SYSDATE);
결과
table EX2_10이(가) 생성되었습니다.
입력
INSERT INTO ex2_10 (col1, col2) VALUES ('AA', 'BB');
결과
1개 행 이(가) 삽입되었습니다.
입력
INSERT INTO ex2_10 VALUES ('AA', 'AA');
결과
COL1 COL2 CREATE_DATE
----- ----- -------------------
AA BB 2015/01/22 15:49:09
구문에서 CREATE_DATE에 디폴트 값으로 SYSDATE를 명시했기 때문에, test 테이블에 데이터를 입력할 때 CREATE_DATE에 별도로 값을 넣지 않아도 자동으로 현재 일자와 시간이 입력된다.