본문 바로가기
DataBase/Oracle

DDL/CONSTRAINT) CHECK 제약 조건

by 박채니 2022. 4. 26.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


CONSTRAINT

- 제약 조건

테이블의 컬럼에 대해서 데이터 무결성을 지키기 위해 설정하는 조건

※ 데이터 무결성이란?

데이터가 일관되고, 정확하게 유지 되는 것

not null을 제외하고 constraint_name을 반드시 지정 및 table_level로 작성

 

① not null (C) : 해당 컬럼에 null 값을 허용하지 않음

② unique (U) : 레코드 별로 해당 컬럼에 중복을 허용하지 않음

③ primary key (P) : 식별자 컬럼을 지정, 레코드를 구별하기 위한 고유 값을 가진 컬럼 → 테이블 당 하나만 허용 / null 허용 X

④ foreign key (R) : 외래키. 부모 테이블의 특정 컬럼 값만 사용 가능하도록 제약

⑤ check (C) : 해당 컬럼의 값의 범위/목록을 제한 (도메인을 설정하는 제약 조건)

 


CHECK

- 해당 컬럼의 값의 범위, 목록을 제한하는 제약 조건

create table member(
    id varchar2(20),
    password varchar2(20) not null,
    name varchar2(50) not null, 
    email varchar2(150) not null,
    gender char(1),
    point number default 0,
    reg_date date default sysdate,
    constraint pk_member_id primary key(id),
    constraint uq_member_email unique(email),
    constraint ck_member_gender check(gender in ('M', 'F')),
    constraint ck_member_point check(point >= 0)
);

insert into
    member
values ('honggd', '1234', '홍길동', 'honggd@gmail.com', 'M', 1000, default);

insert into
    member
values ('sinsa', '1234', '신사임당', 'sinsa@gmail.com', 'f', 1000, default);
-- ORA-02290: check constraint (KH.CK_MEMBER_GENDER) violated

insert into
    member
values ('sejong', '1234', '세종대왕', 'sejong@gmail.com', 'M', -1000, default);
-- ORA-02290: check constraint (KH.CK_MEMBER_POINT) violated

insert into
    member
values ('sejong', '1234', '세종대왕', 'sejong@gmail.com', null, null, default); -- null 허용

select * from member;

CHECK로 지정한 범위 ('f', -1000)가 아닌 값을 입력하니 

"ORA-02290: check constraint (KH.CK_MEMBER_GENDER) violated"

"ORA-02290: check constraint (KH.CK_MEMBER_POINT) violated" 와 같은 오류 메세지가 출력 되었습니다.

 

다만, check 또한 null 값은 허용하기 때문에 null 값을 허용하지 않도록 하려면 not null 제약 조건을 추가해야 합니다.