테이블에 부적합한 데이터가 삽입/수정/삭제되는 것을 막아줌.
- 제약조건 선언 문법
컬럼 레벨 문법 : nn, uk, pk, ck
테이블 레벨 문법 : fk, uk, pk, ck
null값이 삽입/수정될 수 없는 제약조건
create table test1
(id int not null,
name varchar(30) not null,
jumin varchar(13) not null,
job varchar(20),
email varchar(20),
phone varchar(20) not null,
start_date date);
desc test1;
중복값이 삽입/수정되는 것을 막아주는 제약조건
create table test2
(id int not null unique,
name varchar(30) not null,
jumin varchar(13) not null unique,
job varchar(20),
email varchar(20) unique,
phone varchar(20) not null unique,
start_date date);
desc test2;
not null + unique의 성격을 가지고 있는 제약조건
create table test3
(id int primary key,
name varchar(30) not null,
jumin varchar(13) not null unique,
job varchar(20),
email varchar(20) unique,
phone varchar(20) not null unique,
start_date date);
desc test3;
자기자신 테이블이나 다른 테이블의 특정 컬럼(PK, UK)을 첨조하는 제약조건
create table test4
( t_num int primary key,
t_id int,
title varchar(20) not null,
story varchar(100) not null,
foreign key(t_id) references test3(id) );
desc test4;
- MUL : foreign key
해당 컬럼이 만족해야하는 조건문을 자유롭게 지정하는 제약조건
create table test5
(id int(10) primary key,
name varchar(30) not null,
jumin varchar(13) not null unique check (length(jumin)=13),
job varchar(20),
email varchar(20) unique,
phone varchar(20) not null unique,
start_date date check (start_date >= '2005-01-01'));
desc test5;
show databases;
- information_schema : DB에 대한 정보를 볼수 있는 DB 사전
use information_schema;
show tables;
check_constraints 체크 제약 조건
columns 컬럼 정보
table_contraints 테이블마다 선언된 제약조건
tables 테이블들에 대한 정보
desc table_constraints;
어떤 DB에 어떤 제약조건이 있는지 확인할수 있음
select table_schema, table_name, constraint_type
from table_constraints
where table_schema = 'hr'
order by table_name;
- not null은 조회 안됨
desc check_constraints;
select *
from check_constraints
where constraint_schema = 'hr';
기본 테이블(서브쿼리 테이블)의 복사본 테이블이 생성됨.
제약조건은 not null 제약조건만 복사
use hr;
create table dept80
as select employee_id, last_name, salary*12 as annsal, hire_date
from employees
where department_id = 80;
desc dept80;
select *
from dept80;
create table copy_dept
as select *
from departments;
desc copy_dept;
select *
from copy_dept;
create table TITLE
(TITLE_ID int primary key,
TITLE varchar(60) not null,
DESCRIPTION varchar(400) not null,
RATING varchar(4) check(RATING in('G', 'PG', 'R', 'NC17', 'NR')),
CATEGORY varchar(20) check(CATEGORY in ('DRAMA','COMEDY','ACTION','CHILD','SCIFI','DOCUMENTARY')),
RELEASE_DATE date);
desc title;
create table TITLE_COPY
(COPY_ID int,
TITLE_ID int,
STATUS varchar(15) not null check(STATUS in ('AVAILABLE', 'DESTROYED', 'RENTED', 'RESERVED')),
foreign key(TITLE_ID) references TITLE(TITLE_ID),
primary key(COPY_ID, TITLE_ID));
desc title_copy;
제약조건은 1가지만 보여짐
DB사전으로 상세히 조회 가능