제약 조건은 데이터의 무결성을 지키기 위해 제한하는 조건입니다.
제약조건 종류
- Primary Key 제약조건
- Foreign Key 제약조건
- Unique 제약조건
- Check 제약조건
- Default 정의
- Null값 허용
기본키 (Primary Key) 제약조건
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
혹은
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
height tinyint unsigned null
);
alter table member add constraint primary key (mem_id);
외래 키(Foreign Key) 제약 조건
create table buy
( num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
);
일대다 (PK-FK) 관계를 맺은 상태에서는 제약조건으로 오류를 발생 시킴
만약 에러가 발생 하지 않고 member 테이블의 ‘BLK’가 ‘PINK’로 변경 되었다면 어떻게 될까요? buy 테이블에는 여전히 mem_id가 ‘BLK’로 되어있어서 해당 열은 member 테이블을 참조 하지도 못하는 고아 신세가 됩니다. 데이터 무결성이 깨진 상태 입니다. 이렇게 데이터베이스는 무결성을 지키기 위해 제약조건을 발동시켜 오류를 발생 시킵니다. 데이터가 엉망이 되는것 보다 해당 쿼리를 동작하지 못하게 하는게 훨씬 좋으니까요.
create table buy
( num int auto_increment not null primary key,
mem_id char(8) not null,
prod_name char(6) not null,
foreign key(mem_id) references member(mem_id)
on update cascade
on delete cascade
);
drop table buy, member; -- 실습을 위해 테이블 모두 삭제
create table member
( mem_id char(8) not null primary key,
mem_name varchar(10) not null,
email char(30) null unique,
height tinyint unsigned null check (height >= 100),
phone1 char(3) default '02'
);