SQLite | 테이블 (Table) | CHECK 제약 조건

컬럼에 저장되는 값에 조건에 일치하는지 여부의 판정을 할 경우, 컬럼에 CHECK 제약 조건을 설정한다. 여기에서 CHECK 제약 조건 사용에 대해 설명한다.

CHECK 제약 조건이란?

컴럼에 CHECK 제약 조건을 설정하면 데이터를 추가 할 때 값이 지정된 조건을 충족하는지 여부를 확인 할 수 있다. CHECK 제약 조건을 컬럼에 설정하는 경우 형식은 다음과 같다.

CREATE TABLE 테이블명 (컬럼명 CHECK (조건식), ...);

조건식은 컬럼에 저장되는 값의 조건을 설명한다. 예를 들면 저장할 수 있는 값을 0 이상의 값으로 제한하는 등 조건식을 지정할 수 있다.

또한 여러 컬럼을 조합한 조건식을 설정하려면 형식으로 다음과 같은 형식도 사용할 수 있다. 자세한 내용은 나중에 설명하도록 하겠다.

CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, ..., CHECK (조건식));

그러면 실제로 제약 조건을 설정해 보자. 다음과 같이 테이블을 만든다. old 컬럼에는 CHECK 제약 조건이 설정되어 있으며, 18이상의 정수만 저장할 수 없습니다.

create table user (id integer, name text, old integer check (old> 18));
sqlite> create table user (id integer, name text, old integer check (old> 18));
sqlite> 

old 컬럼의 값이 조건에 일치하는 경우는 문제없이 데이터가 추가 된다.

insert into user values (1, 'devkuma', 19);
insert into user values (4, 'kimkc', 21);
qlite> insert into user values (1, 'devkuma', 19);
sqlite> insert into user values (4, 'kimkc', 21);
sqlite> 
sqlite> select * from user;
id          name        old       
----------  ----------  ----------
1           devkuma     19        
4           kimkc       21        
sqlite> 

다음은 old 컬럼이 조건에 일치하지 않는 데이터를 추가해 본다. 그러면 “Error: CHECK constraint failed: user"라는 오류 메시지가 표시된다.

insert into user values (7, 'araikuma', 16);
sqlite> insert into user values (7, 'araikuma', 16);
Error: CHECK constraint failed: user
sqlite> 

이와 같이 CHECK 제약 조건을 사용하여 컬럼에 저장할 수있는 값을 제한할 수 있다.

AND / OR를 사용하여 복잡한 조건식을 설정한다.

CHECK 제약 조건으로 작성하는 조건식을 AND 또는 OR를 사용하여 더 복잡한 조건식을 작성할 수 있다. 예를 들어 old 컬럼의 값을 18보다 크고 30 이하로 제한하는 경우는 다음과 같이 작성할 수 있다.

create table user (id integer, name text,
  old integer check (old > 18 and old < 30));

다른 예로 gender 컬럼의 값을 man 또는 woman로 제한하려면 다음과 같이 작성할 수 있다.

create table user (id integer, name text,
  gender text check (gender = 'man' or gender = 'woman'));

또한 여러 컬럼을 사용한 조건식을 작성하는 경우, 두 번째 형식을 사용하여 다음과 같이 작성할 수도 있다. 아래에서는 성별이 여성이거나 나이가 20보다 큰 경우에 데이터를 추가할 수 있다.

create table user (name text, old integer, gender text,
  check (gender = 'woman' or old> 20));

그러면 실제로 제약 조건을 설정해 보자. 마지막에 작성된 테이블을 실제로 만들어 보자.

sqlite> create table user (name text, old integer, gender text, check (gender = 'woman' or old> 20));
sqlite> 

데이터를 추가한다. 성별이 여자이거나 나이가 20보다 큰 경우는 성공적으로 추가가 된다.

insert into user values ( 'dekuma', 16, 'woman');
insert into user values ( 'kimkc', 31, 'man');
insert into user values ( 'araikuma', 24, 'woman');
sqlite> insert into user values ( 'dekuma', 16, 'woman');
sqlite> insert into user values ( 'kimkc', 31, 'man');
sqlite> insert into user values ( 'araikuma', 24, 'woman');
sqlite> 

다음은 CHECK 제약 조건의 조건식에 맞지 않는 데이터를 추가할 수 있다. 그러자 “Error: CHECK constraint failed: user"라는 오류 메시지가 표시된다.

insert into user values ('happykuma', 15, 'man');
sqlite> insert into user values ('happykuma', 15, 'man');
Error: CHECK constraint failed: user
sqlite>

이렇게 AND 또는 OR를 사용하여 더 복잡한 조건식을 CHECK 제약 조건으로 설정하는 것도 가능하다.




최종 수정 : 2019-11-13