⑤ 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에 별도로 값을 넣지 않아도 자동으로 현재 일자와 시간이 입력된다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.