[오라클(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(10) NOT 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(20) unique,
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(3) PRIMARY KEY,
subname varchar2(30)
);
|
cs |
테이블을 생성할 때 primary key 조건을 걸어주는 경우 칼럼 속성 마지막 부분에 primary key를 적어주면 된다.
EX) 이미 만들어진 class 테이블에서 id 칼럼을 primary key로 지정
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(4) references student(studno),
subno number(3) references 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(200) default 'No comment'
);
|
cs |
*한눈에 보기*
1
2
3
4
5
6
7
|
create table subject(
subno number(5) PRIMARY KEY,
subname varchar2(20) NOT NULL,
profno number(4) references professor(profno)
term varchar2(1) CHECK(term in('1','2')),
type varchar2(10) default '시청각'
);
|
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
- 값이 입력되지 않았을 때의 기본값
'Database > Oracle' 카테고리의 다른 글
[오라클(Oracle) ] 등가 조인(Equi Join) / 비등가 조인(Non- Equi Join) (0) | 2022.04.17 |
---|---|
[오라클(Oracle) ] 시퀀스(SEQUENCE) (0) | 2022.04.15 |
[오라클(Oracle) ] DDL( CREATE / ALTER / DROP / TRUNCATE ) (0) | 2022.04.14 |
[오라클(Oracle) ] DML(INSERT / UPDATE / DELETE) (0) | 2022.04.14 |
[오라클(Oracle) ] 데이터 그룹 생성(GROUP BY 절) / HAVING 절 (0) | 2022.04.14 |
댓글