가. Not Null : Null이 아닌 값만 허용
나. Unique Key : 해당 컬럼에서 중복되지 않고 유일한 값만 허용
다. Primary Key : Not null 와 Unique key의 결합된 형태, 1개의 테이블에 1번만 사용가능
라. Foreign Key : 참조되는 테이블의 컬럼 값과 일치하거나 Null만 허용
마. Check : 저장 가능한 데이터 값의 범위나 조건안에서 허용
참고 : 제약조건은 primary key는 테이블에, 그 외는 컬럼에 걸린다.
2. 무결성 제약조건의 특징
가. 테이블에 정의, 데이터 딕셔너리에 저장
나. 일시적으로 활성화/비활성화 가능
3. 참조 무결성 제약조건
가. 참조 당하는 쪽 : 부모 테이블, 참조키(Reference Key)
나. 참조 하는 테이블 : 자식 테이블, 외래키(Foreign Key)
참고 : 참조 무결성 제약조건을 걸 경우
자식테이블에 insert 시, foreign key 검증을 위해 부모테이블을 full scan하며, 부모테이블에 delete 시 자식테이블에 reference key 여부확인을 위해 자식테이블을 full scan한다.
이로인한 성능저하를 막기위해 양쪽테이블에 인덱스를 생성해 주어야 한다.
4. 연습문제
가. 테이블 생성1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
create table member2(userid varchar2(10)constraint userid_pk primary key,username varchar2(20),passwd varchar2(10)constraint passwd_nn not null,idnum varchar2(13) constraint idnum_nn not null,phone varchar2(13)constraint phone_nn not null,address varchar2(2),regdate date,email varchar2(15)constraint email_nn not nullconstraint email_u unique); |
나. 테이블 생성2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
create table dept2(deptno number(3) constraint deptno_pk primary key,dname varchar2(20) constraint dname_nn not null,upper number(3));create table sawon(sabun number(5),name varchar(20) constraint name_nn not null,tel number(15),deptno number(3),hiredate date default sysdate,constraint dept_fk foreign key(deptno) references dept2(deptno)); |
다. 무결성 제약조건 추가
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
alter table sawonadd constraint sabun_pk primary key(sabun);alter table sawonadd constraint dept_fk2 foreign key(deptno) references dept2(deptno);alter table member2add constraint idnum_u unique(idnum);alter table member2add constraint regdate_ck check(regdate between '01-JAN-2012' and '31-DEC-2012');alter table member2 modify (username constraint username_nn not null); |
참고 : not null을 추가할 경우 modify 명령문을 사용한다
라. 무결성 제약조건 삭제
|
1
2 |
alter table member2drop constraint idnum_u; |
마. 무결성 제약조건 활성화/비활성화
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
alter table member2disable constraint regdate_ck;select table_name, constraint_name, statusfrom user_constraintswhere table_name='MEMBER2';TABLE_NAME CONSTRAINT_NAME STATUS------------------------------ ------------------------------ --------MEMBER2 REGDATE_CK DISABLEDalter table member2enable constraint regdate_ck;select table_name, constraint_name, statusfrom user_constraintswhere table_name='MEMBER2';TABLE_NAME CONSTRAINT_NAME STATUS------------------------------ ------------------------------ --------MEMBER2 REGDATE_CK ENABLED |
바. 무결성 제약조건 데이터 딕셔너리(Data Dictionary)
- USER_CONSTRAINTS : 제약조건이 정의된 테이블, 제약조건, 상태, 종류 등
- USER_CONS_COLUMNS : 제약조건이 정의된 컬럼, 제약조건 이름 등