더북(TheBook)

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

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