제약조건 (Constraint)
- 틀린데이터는 못들어 오게 막고, 맞는 데이터만 들어오게 해주기 위해 사용.
- 데이터의 정확성과 일관성을 보장하기 위해 각 칼럼에 정의하는 규칙.
- 딕셔너리에 저장됨
- 테이블 생성시 무결성 제약조건을 정의하여 프로그래밍 과정을 줄여준다.
- 데이터베이스 서버에 의해 무결성 제약조건이 관리되어 데이터 오류 발생 가능성을 줄여준다.
- 일시적으로 활성화 또는 비활성화 할 수 있다.
종류 (5가지)
무결성 제약조건 (Constraint) |
설 명 |
NOT NULL |
Null값 포함할수 없음 |
유니크 |
중복되는 값 오면 안됨 ( 중복되는 것 없어야 하므로, 서버프로세스가 기존 데이터를 찾아야 한다. 오래걸림 - 해결 : 인덱스) |
primary key |
그 사람만이 가지고 있는 고유 값 (NOT NULL + 유니크) |
참조 |
해당 칼럼 값은 참조되는 테이블의 칼럼 값 중 하나와 일치하거나 Null을 가짐 - 자식 테이블 : 다른 테이블의 값을 참조하는 테이블 - 외래키(foreign key): 부모테이블의 값을 참조하는 자식테이블의 칼럼 - 부모 테이블 : 다른 테이블에 의해 참조되는 테이블 - 참조키(reference : 자식 테이블에서 참조하는 부모 테이블의 칼럼 |
CHECK |
해당 칼럼에 저장 가능한 데이터 값의 범위나 조건 지정 |
제약조건 사용법 : Table 생성할때나, Table 생성후 추가 할 수 있다.
관리 : 조회 하거나, 안쓰는 제약조건은 지운다.
제야조건 생성
칼럼이름 |
데이터타입 |
KEY Type |
NN/Unique |
FK table |
FK column |
설명 |
SUBNO |
NUMBER(5) |
PK |
NN,U |
|
|
강좌번호 |
SUBNAME |
VARCHCAR2(20) |
|
NN |
|
|
강좌이름 |
TERM |
VARCHAR2(1) |
|
|
|
|
학과 |
TYPE |
VARCHAR2(1) |
|
|
|
|
필수/선택구분 |
SQL> CREATE TABLE subject
(subno NUMBER(5)
CONSTRAINT subject_no_pk PRIMARY KEY,
subname VARCHAR2(20)
CONSTRAINT subject_name_nn NOT NULL
CONSTRAINT subject_name_uk Unique ,
term VARCHAR2(1)
CONSTRAINT subject_term_ck CHECK (term between 1 and 5),
type VARCHAR2(1));
제약조건 거는 방법 (정식,약식방법)
정식과 약식은 성능상 차이가 없으나 약식은 관리하기가 불편
정식
(subno NUMBER(5)
CONSTRAINT subject_no_pk PRIMARY KEY,
※ 인라인 표기방식 Emp_id number(6) primary key
※ 아웃라인 표기방식 Emp-id number(6), Constraint emp_pk primary key(emp_id) |
약식
이름을 오라클이 정해주기 때문에 관리하기 불편함
(subno NUMBER(5) PRIMARY KEY,
하나의 컬럼에 여러 개의 constraint가 걸릴수 있다.
P.K는 제외 : 1개의 Table당 1개만 가능
제약조건 |
|
|
unique |
|
|
check | |
N/N |
N/N |
N/N | |
테 이 블 |
이 름 |
주 소 |
TEL |
제약조건 추가
예제 : 부서테이블의 deptno에 기본키, dname에 NOT NULL 무결성 제약조건을
추가하여라.
SQL> ALTER TABLE department
ADD CONSTRAINT dept_no_pk PRIMARY KEY(deptno);
SQL> ALTER TABLE department
MODIFY (dname CONSTRAINT dept_dname_nn NOT NULL);
※ NOT NULL 제약조건 추가는 NOT NULL 허용상태를 NOT NULL 불가로 변경하는 것이므로 MODIFY 명령문을 사용해야 한다.
제약조건 삭제
예제 : 강좌 테이블의 subject_term_ck 무결성 제약 조건을 삭제하여라.
SQL> ALTER TABLE subject
DROP CONSTRAINT subject_term_ck
제약조건 비활성화
수강 테이블의 sugang_pk, sugang_studno_fk 무결성 제약조건을 비활성화 하세요.
SQL> ALTER TABLE sugang
DISABLE CONSTRAINT sugang_pk
SQL> ALTER TABLE sugang
DISABLE CONSTRAINT sugang_studno_fk
제약조건 활성화
예제 : 수강 테이블의 sugang_pk, sugang_studno_fk 무결성 제약조건을
활성화 하세요.
SQL> ALTER TABLE sugang
ENABLE CONSTRAINT sugang_pk
SQL> ALTER TABLE sugang
ENABLE CONSTRAINT sugang_studno_fk
PK FK 설정 상태 보기
SQL> SELECT *
FROM ALL_CONSTRAINTS
WHERE OWNER = '계정'
AND TABLE_NAME = '테이블명';
14p===========================================
연습문제
회원(member) 테이블 명세서
칼럼이름 |
데이터 타입 |
KEY Type |
NN/Unique |
FK table |
FK column |
설명 |
userid |
VARCHAR2(10) |
PK |
NN,U |
|
|
사용자아이디 |
username |
VARCHAR2(20) |
|
NN |
|
|
회원이름 |
passwd |
VARCHAR2(10) |
|
NN |
|
|
비밀번호 |
idnum |
VARCHAR2(13) |
|
NN/U |
|
|
주민등록번호 |
phone |
VARCHAR2(13) |
|
NN |
|
|
전화번호 |
address |
VARCHAR2(20) |
|
|
|
|
주소 |
regdate |
date |
|
|
|
|
가입일 |
|
VARCHAR2(15) |
|
NN/U |
|
|
이메일주소 |
1. 다음 회원 테이블 명세서를 참조해서 제약조건이 포함된 테이블을 생성하세요
SQL> create table member
(userid varchar2(10) constraint userid_pk Primary key,
username varchar2(20) constraint username_nn not null,
passwd varchar2(10) constraint passwd_nn not null,
idnum varchar(13) constraint idnum_nn not null
constraint idnum_uk unique,
phone varchar2(13) constraint phone_nn not null,
address varchar2(20),
regdate date,
email varchar2(15) constraint email_nn not null
constraint email_uk unique)
SQL> desc member
문제 : 아래의 조건으로 테이블을 생성 하시고 제약조건을 설정하세요
Sawon 테이블 Sabun : number(5) : PK Name : varchar2(20) : not null Tel : number (15) Deptno : number (3) Hiredate : date |
Deptt 테이블 Deptno : number(3) : PK Dname : varchar2(20) NN Upper : number(3) |
테이블 생성
SQL> create table deptt
(deptno number(3) constraint deptno_pk primary key,
dname varchar2(20) constraint dname_nn not null,
upper number(3));
SQL> create table sawon
(sabun number(5) constraint sabun_pk primary key,
name varchar2(20) constraint name_nn not null,
tel number(15),
deptno number(3),
hiredate date);
1. Deptno컬럼은 dept 테이블의 deptno의 값을 참조하게 FK로 제약조건을 설정하세요.
SQL> alter table sawon
add (constraint sawon_fk foreign key(deptno)
references deptt(deptno));
SQL> create table sawon
(sabun number(5) PRIMARY KEY,
name varchar2(20) NOT NULL,
tel number(15),
hiredate date,
deptno number(3),
CONSTRAINT sawon_deptno_fk FOREIGN KEY(deptno) REFERENCES deptt(deptno));
2. Hiredate 는 오늘 날짜가 기본값이 되도록 설정하세요.
SQL> alter table sawon
modify (hiredate default sysdate);
1.2. (다른답)생성시 설정
SQL> create table sawon
(sabun number(5) primary key,
name varchar2(20) not null,
tel number(15),
hiredate date default sysdate,
deptno number(3) constraint sawon_deptno_fk references deptt(deptno));
'Oracle > Oracle - SQL' 카테고리의 다른 글
SQL정리 12장 View (0) | 2012.01.12 |
---|---|
SQL정리 11장 Index (0) | 2012.01.11 |
SQL정리 9장 DDL (0) | 2012.01.10 |
SQL정리 8장 DML (0) | 2012.01.10 |
SQL정리 7장 서브쿼리 (0) | 2012.01.09 |