MySQL

테이블 생성 시의 제약조건

WoodenStella 2023. 1. 10. 13:44

이번 게시글에선 테이블 생성 시의 제약조건에 대해 조금 알아보고자 한다.

1. null값 배제(필수적인 정보의 확보)

 

학교에서 학생을 입학시킬 때를 예시로 들어보자.

이때 데이터로 입력해야 하는 필수적인 정보는 무엇이 있을까?

학번, 이름, 사관학교의 경우 연령 등 특히나 '없어서는 안 되는'정보들은 분명히 있다.

다르게 말해, 데이터가 'null' 값으로 존재해서는 안 되는 상황이다.

이런 경우, 테이블에서 컬럼 설정 시 값을 넣어줄 수 있다.

다음과 같은 형식이다.

create table Book(
  custid integer not null
);

다음과 같이 설정하면 custid가 입력되지 않을 시 오류가 발생하며, 해당 행의 데이터 입력이 불가해진다

2. 기본값 설정

아이스크림 할인매장은 가격이 똑같은 경우가 많다.

400원어치의 아이스크림을 7종류 주문했는데, 매번 price를 입력하기 번거롭다면 '기본값 설정'으로 해결할 수 있다.

create table bar_icecream(
  icid integer primary key,
  icname varchar(30)
  price integer default 400;
);

다음과 같이 설정해두면, price 컬럼을 입력할 때 default를 넣어 400으로 설정할 수 있다.

데이터를 입력 후 출력해 확인해보자.

insert into bar_icecream values(1, 'Merona', default);

select *
  from bar_icecream;

values 에 price 데이터를 default로 넣으니 price가 400으로 설정된 것이 확인된다.

3. 범위 설정

만약 가게를 2022년 10월 19일에 오픈해서, 오류가 나지 않도록 그 이전의 데이터는 못 받게 막아놓고 싶다면 어떻게 할까?

이 때에도 제약을 걸어줄 수 있다. check를 활용하면 된다.

check로 제약조건을 걸어 다음과 같이 테이블을 형성해보자.

create table new_orders(
  orderid INTEGER primary key,
  custid integer,
  bookid integer,
  saleprice integer,
  orderdate date check (date>2022-10-19)
  foreign key(custid) references Customer(custid),
  foreign key(bookid) references Book(bookid)
);

*마지막 두 줄은 foreign key 설정으로, 저번에 언급했듯 다른 테이블의 데이터와 연동하여 맞지 않을 경우 오류가 발생한다.

이럴 경우 date 값이 2022-10-19 보다 작지 않도록 제약한다.

*수정: mysql에서는 check 제약조건을 지원하지 않는다고 한다!!

이상으로 테이블 생성 시의 제약조건 설정에 대해 알아보았다.