본문 바로가기
Database/Oracle

[오라클(Oracle) ] 제약조건(Constraints) /NOT NULL / UNIQUE / PRIMARY KEY / FOREIGN KEY / CHECK / DEFAULT

by Ali1020 2022. 4. 15.

[오라클(Oracle) ] 제약조건(Constraints) / NOT NULL / UNIQUE / PRIMARY KEY  / FOREIGN KEY / CHECK / DEFAULT

 

1. NOT NULL

2. UNIQUE

3. PRIMARY KEY

4. FOREIGN KEY

5. CHECK

6. DEFAULT

 

 

 

 테이블과 각 칼럼에 제약조건(constraint)을 걸어 부적절한 데이터가 입력되는 것을 방지할 수 있다. 즉, 제약조건(constraint)을 통해 데이터의 정확성과 일관성을 얻을 수 있다. 제약조건(constraint)에는 PRIMARY KEY(기본키), FOREIGN KEY(외래키), NOT NULL, UNIQUE(고유키), CHECK, DEFAULT가 있다.

 

 

1. NOT NULL

not null 제약조건이 있는 칼럼에는 null값이 올 수 없다. 데이터 생략 시 오류가 발생하며 기존에 값이 입력되어 있는 행을 null값으로 수정하는 경우에도 오류가 발생한다.

 

EX) student 테이블 생성 시 name 칼럼을 not null로 설정

1
2
3
4
create table student(
studno number(5),
name varchar2(10NOT NULL
);
cs

 

EX) 이미 만들어진 student 테이블에서 studno 칼럼을 not null로 지정

1
2
alter table student
modify (studno constraint studno_nn not null);
cs

not null 제약조건을 수정할 때는 modify를 통해 변경한다. 참고로 not null을 제외한 다른 모든 제약조건들은 수정이 불가하여 제약조건을 drop 한 이후 다시 생성해야 한다.

 

 

 

 

 

 

2. UNIQUE

UNIQUE(고유키) 제약조건이 걸린 칼럼은 중복되는 값이 입력될 수 없다. NULL값은 허용되며 하나의 테이블에서 여러 칼럼이 UNIQUE 조건일 수 있다.

 

EX) FOOD 테이블 생성 시 name 칼럼을 unique로 설정

1
2
3
4
5
create table food(
id number(3),
name varchar2(20unique
price number(10)
);
cs

 

EX) 이미 만들어진 FOOD 테이블에서 id 칼럼을 unique로 지정

1
2
alter table food
ADD CONSTRAINT food_id_uk unique(id);
cs

위와 같이 unique 제약조건을 나중에 추가할 경우 alter 절과 add constraint 절을 통해 수정할 수 있다. 위 예시의
food_id_uk는 제약조건명을 의미하고 unique로 지정할 칼럼명을 unique 괄호 안에 적어준다.

 

 

 

 

 

3. PRIMARY KEY(기본키)

PRIMARY KEY(기본키)는 테이블 내 행의 식별자로, PRIMARY KEY에 해당하는 칼럼 데이터 값은 유일해야 하고 null이 올 수 없다. 즉, UNIQUE + NOT NULL의 형태를 띤다. 테이블당 1개의 PRIMARY KEY를 가질 수 있으며 여러 칼럼을 묶어서 PRIMARY KEY로 설정하는 것도 가능하다.

 

EX) subject 테이블 생성 시 subno 칼럼을 primary key로 설정

1
2
3
4
create table subject(
subno number(3PRIMARY KEY,
subname varchar2(30)
);
cs

테이블을 생성할 때 primary key 조건을 걸어주는 경우 칼럼 속성 마지막 부분에 primary key를 적어주면 된다.

 

 

EX) 이미 만들어진 class 테이블에서 id 칼럼을 primary key로 지정

1
2
alter table class
ADD CONSTRAINT class_id_pk PRIMARY KEY(id);
cs

 

 

 

 

 

4. FOREIGN KEY

FOREIGN KEY(외래키)는 다른 다른 테이블의 PRIMARY KEY를 참조하여 테이블 간의 참조 무결성을 보장한다. 테이블 생성 시 칼럼 데이터 타입과 크기 뒤에 references 참조할테이블(참조할칼럼) 형식으로 넣어 준다.

 

EX) e_class 테이블 생성 시 studno 칼럼은 student테이블의 studno 칼럼을 참조, subno 칼럼은 subject 테이블의 subno 칼럼을 참조

1
2
3
4
create table e_class(
studno number(4references student(studno),
subno number(3references subject(subno)
);
cs

 

EX) 이미 만들어진 professor 테이블의 deptno 칼럼을 foreign key로 지정(department 테이블의 deptno 칼럼 참조)

1
2
alter table professor
add constraint prof_fk foreign key(deptno) references department(deptno);
cs

 

EX) 만들었던 외래키 prof_fk 삭제

1
2
alter table professor
drop constraint prof_fk;
 

 

 

 

5. CHECK

해당 칼럼에 저장될 수 있는 데이터 값의 조건을 미리 정해두고 이에 해당하는지 체크하는 방식이다. 입력한 값이 사전에 지정한 조건에 해당되지 않으면 오류를 발생시킨다.

 

EX) student 테이블 생성 시 grade 칼럼에는 '1', '2', '3', '4' 중 하나만 입력될 수 있도록 check 제약조건 지정

1
2
3
4
5
create table student(
studno number(5),
name varchar2(10), 
grade varchar2(2) CHECK(grade in('1''2''3''4'))
);
 
cs

 

EX) food 테이블 생성 시 price 칼럼에는 0 이상의 값이 입력되도록 check 제약조건 지정

1
2
3
4
5
create table food(
id number(5),
name varchar2(10), 
price number(10) CHECK(price >= 0)
);
cs

 

 

 

 

6. DEFAULT

DEFAULT는 값이 입력되지 않았을 때의 기본값을 의미한다.

 

EX) emp 테이블 생성 시 memo 칼럼에 데이터가 입력되지 않을 경우 'No comment'가 기본값으로 입력되도록 설정

1
2
3
4
5
create table emp(
empno number(5),
ename varchar2(10), 
memo varchar2(200default 'No comment'
);
 
cs

 

 

 

 

 

*한눈에 보기*

1
2
3
4
5
6
7
create table subject(
subno number(5PRIMARY KEY,
subname varchar2(20NOT NULL,
profno number(4references professor(profno)
term varchar2(1) CHECK(term in('1','2')),
type varchar2(10default '시청각'
);
 
cs

 

 

 

 

[오라클(Oracle) ] 제약조건(Constraints) / NOT NULL / UNIQUE / PRIMARY KEY  / FOREIGN KEY / CHECK / DEFAULT

-요약-

 

1. NOT NULL

- 해당 칼럼은 null값 불가

 

2. UNIQUE

- 중복되는 값 올 수 없다

- null값 가능

 

3. PRIMARY KEY

- 유일한 값을 가지는 테이블 내의 식별자

- null값 불가

- not null + unique 형태

 

4. FOREIGN KEY

- 다른 테이블의 primary key를 참조

 

5. CHECK

- 조건에 맞지 않는 값이 입력되면 오류 발생

 

6. DEFAULT

- 값이 입력되지 않았을 때의 기본값

댓글