개발 지식/[DBMS] Oracle

[Oracle] 제약 조건(5) - 체크(CHECK)

devGSP 2022. 6. 27. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

체크(CHECK)

 

설명

 

CHECK는 값의 범위 또는 패턴을 정의할 때 사용하는 제약 조건이다.

예를 들면 특정 열에 들어가는 문자열이 반드시 5글자 이상이어야 한다거나, 특정 열에 들어가는 숫자는 반드시 1000을 넘어야 한다는 조건 등을 설정해 두는 것이다.

 

 

문법

 

인라인(inline) 제약 조건 정의

 

-- 제약 조건 이름 미기입 시

CREATE TABLE [테이블 이름](

  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CHECK [해당 열의 조건 설정]
);

 

-- 제약 조건 이름 기입 시

CREATE TABLE [테이블 이름](

  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);

 

 

아웃오브라인(out-of-line) 제약 조건 정의


CREATE TABLE [테이블 이름](

  [지정할 열 이름] [지정할 열 자료형],
  (다른 열 정의 문법 생략),
  CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);

 

 

사용 예시

 

1. 점수(SCORE)가 60 이상인 학생들만 INSERT 가능한 TB_PASS_STUDENT 테이블의 CHECK 설정

 

CREATE TABLE TB_PASS_STUDENT(
  STUDENT_ID NUMBER(3) PRIMARY KEY,
  STUDENT_NM VARCHAR2(20),
  SCORE NUMBER(3) NOT NULL,
  CONSTRAINT SCORE_CK CHECK (SCORE >= 60)
);

INSERT INTO TB_PASS_STUDENT
VALUES(101, '김경완', 65);

INSERT INTO TB_PASS_STUDENT
VALUES(102, '권지수', 100);

INSERT INTO TB_PASS_STUDENT
VALUES(103, '김남기', 95);

INSERT INTO TB_PASS_STUDENT
VALUES(104, '김해준', 97);

SELECT * FROM TB_PASS_STUDENT;

const5_q1

 

점수가 59인 학생을 INSERT해 보자.

 

INSERT INTO TB_PASS_STUDENT
VALUES(105, '김민제', 59);

const5_q2

 

CHECK 조건에 부합하지 않아 INSERT가 실행되지 않는다.

 

 

2. 연봉(SAL)이 4000 이상 6000 이하인 사람만 INSERT 가능한 TB_SILVER_MEMBER 테이블의 CHECK 설정

 

CREATE TABLE TB_SILVER_MEMBER(
  MEM_ID NUMBER(3) PRIMARY KEY,
  MEM_NM VARCHAR2(20),
  SAL NUMBER(5) NOT NULL,
  CONSTRAINT SAL_CK CHECK (SAL BETWEEN 4000 AND 6000)
);

INSERT INTO TB_SILVER_MEMBER
VALUES(101, '강재석', 6000);

INSERT INTO TB_SILVER_MEMBER
VALUES(102, '김영현', 5000);

INSERT INTO TB_SILVER_MEMBER
VALUES(103, '이성욱', 4000);

SELECT * FROM TB_SILVER_MEMBER;

const5_q3

 

SAL이 6000을 초과하는 회원을 INSERT해 보자.

 

INSERT INTO TB_SILVER_MEMBER
VALUES(104, '남주현', 9800);

const5_q4

 

CHECK 조건으로 설정한 범위에 포함되지 않아 INSERT가 실행되지 않는다.

 

 

3. 비밀번호(COL_PW)가 8자리 이상으로만 INSERT 가능한 TB_MEMBER_LIST 테이블의 CHECK 설정

 

CREATE TABLE TB_MEMBER_LIST(
  COL_ID VARCHAR2(20) PRIMARY KEY,
  COL_PW VARCHAR2(20) NOT NULL,
  CONSTRAINT PW_CK CHECK (LENGTH(COL_PW) >= 8)
);

INSERT INTO TB_MEMBER_LIST
VALUES('devgsp', '12341234');

INSERT INTO TB_MEMBER_LIST
VALUES('root', '12341234');

SELECT * FROM TB_MEMBER_LIST;

const5_q5

 

비밀번호가 4자리인 ID를 INSERT해 보자.

 

INSERT INTO TB_MEMBER_LIST
VALUES('nonghyup', '1234');

const5_q6

 

역시 INSERT 오류가 발생한다.

반응형