제약조건
- 컬럼 단위 설정 (제약조건 & 인덱스)
- 데이터 신뢰성을 높이기 위한 것 - 중복을 허용하지 않는 제약 조건 등
- 데이터 무결성을 구현할 수 있다.
1. 개체 무결성
not null
: null 불가능, 중복 가능
unique
: 중복 불가능, null 가능
primary key
(기본키)
- 기본키는
not null + unique
이어야 한다.
- BUT
not null + unique
→ 기본키가 되는 것은 아님!
- 하나의 테이블에는 하나의 기본키가 있어야 한다.
2. 영역 무결성
check
: 영역 내의 유효한 값을 체크. 조건을 지정해주어야 한다. null 은 가능
default
: 입력(insert)시 제외되면 기본으로 들어가는 값을 지정
3. 참조 무결성
foreign key
(참조키) : 다른 컬럼을 참조
- 참조하려는 컬럼은 반드시 기본키여야 한다.
- 입력, 생성은 부모가 있어야 자식이 가능
- 수정, 삭제는 자식이 없어야 부모가 가능
- delete cascade - 부모를 삭제할 때 부모를 참조하던 자식까지 전부 삭제
- update cascade - 부모를 수정할 때 부모를 참조하던 자식까지 전부 수정 (Oracle 불가능)
- 오라클에서 update cascade는 트리거로 구현
제약조건 부여
- 컬럼 단위 : 컬럼 속성처럼 추가
- 제약명 :
table_col_제약
- 모든 제약 가능
create table ex(id number(3) [constraint 제약명] primary key, ...);
- 테이블단위 : 컬럼 추가할때처럼 추가
- not null 불가능 (not null 은 컬럼 단위로만 가능)
- 복합컬럼 제약인 경우 - 두 개 이상의 컬럼에 하나의 제약을 주는 경우
create table ex(id number(3), .... , [constraint 제약명] primary key(id));
제약조건 수정
- not null
alter table student
modify jumin_no_varchar2(14) [ [constraint student_juminNo_nn] not null | null ];
- not null 을 제외한 모든 제약조건
- 테이블 대상 설정 가능
- 컬럼을 삭제, 추가, 수정하듯이 제약조건 삭제, 추가, 수정 가능
alter table student
문법
컬럼 단위 제약조건
- 학생 테이블
create table student
(hakbun number(10) constraint student_hakbun_pk primary key,
sname varchar2(20) constraint student_sname_nn not null,
jumin_no varchar(14) constraint student_jumin_no unique,
birth_area varchar(20) default '서울',
age number(3) constraint student_age_ck check(age >= 20 and age <= 30));
- 도서 테이블
create table library(
sno number(10) constraint library_sno_fk references student(hakbun),
book_name varchar2(50) not null,
loan_date date default sysdate,
);
테이블 단위 제약조건
- 학생 테이블
create table student(
hakbun number(10),
sname varchar2(20) constraint student_sname_nn not null,
jumin_no varchar2(14),
birth_area varchar2(20) default '서울',
age number(3),
constraint student_hakbun_pk primary key(hakbun),
constraint student_jumin_no unique(jumin_no),
constraint student_age_ck check(age>=20 and age<=30)
);
- 도서 테이블
create table library(
sno number(10),
book_name varchar2(50) not null,
loan_date date default sysdate,
constraint library_sno_fk foreign key(sno) references student(hakbun)
);
실습

create table dept(
deptno number(3),
dname varchar2(10),
loc varchar2(10),
constraint dept_deptno_pk primary key(deptno),
constraint dept_dname_no unique(dname)
);
create table sawon(
sabun number(3),
saname varchar2(10) not null,
deptno number(3),
sajob varchar2(10),
sapay number(10),
sahire date default sysdate,
sasex varchar2(4),
samgr number(3),
constraint sawon_sabun_pk primary key(sabun),
constraint sawon_deptno_fk foreign key(deptno) references dept(deptno),
constraint sawon_sasex_ck check(sasex = '남자' or sasex = '여자'),
constraint sawon_samgr_fk foreign key(samgr) references sawon(sabun)
);
create table gogek(
gobun number(3),
goname varchar2(10),
gotel varchar2(14),
gojumin varchar2(14),
godam number(3),
constraint gogek_gobun_pk primary key(gobun),
constraint gogek_gojumin_no unique(gojumin),
constraint gogek_godam_fk foreign key(godam) references sawon(sabun)
);