RATSENO

[ORACLE]제약조건 본문

DEV/SQL

[ORACLE]제약조건

RATSENO 2018. 1. 19. 23:43


제약조건

제약조건(Constraints)은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나

데이터 무결성을 보장하기 위한 용도로 사용된다. 

-NOT NULL, UNIQUE, 기본키, 외래키, CHECK



①NOT NULL

컬럼명    데이터타입    NOT NULL

컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야 한다.

즉 반드시 값이 들어 있어야 하는 컬럼에는 NOT NULL 제약조건을 만들어 사용한다.

ex)

CREATE TABLE ex1(

COL_NULL                    VARCHAR2(10),

COL_NOT_NULL            VARCHAR2(10) NOT NULL

);




②UNIQUE

컬럼명    데이터타입    UNIQUE

              또는

CONSTRAINTS 제약조건명 UNIQUE(컬럼명1, 컬럼명2,.....)

UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다.

즉 중복 값을 허용하지 않는다.

UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다. 또한

NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.

ex)

 CREATE TABLE ex2(

COL_UNIQUE_NULL        VARCHAR2(10) UNIQUE,

COL_UNIQUE_NNULL      VARCHAR2(10) UNIQUE NOT NULL,

COL_UNIQUE                VARCHAR2(10),

CONSTRAINTS unique_nm1 UNIQUE(COL_UNIQUE)

);

UNIQUE 비교 대상에서 NULL은 제외된다.



③기본키(Primary Key)

보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다.

기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.

컬럼명    데이터타입    PRIMARY KEY

또는

CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명, ...)

오라클을 비롯한 여러 DBMS는 데이터 무결성을 보장하고 있는데,

데이터 무결성이란 데이터의 정확성일관성을 유지한다는 뜻이다.

간단히 말하자면 > 

테이블상에서 특정 데이터를 뽑아낼 수 있는 유일하면서(중복이 안되면서) NOT NULL인 것이라고 생각하면 될듯하다.

기본키는 여러 컬럼을 하나의 기본키로 만들 수도 있다. 

이 경우에는 CONSTRAINT 키워드를 사용해서 생성해야 된다. 

또한 여러 컬럼을 조합하여 만든 기본키는 유일(UNIQUE)해야 하고, 그 컬럼들에 NULL은 들어갈 수 없다.


ex) 학급 테이블

번호

이름 

전화번호 

홍길동 

01011112222 

2

김철수 

01033334444 

김영희

01055556666 

기본키(1개의 컬럼) - 번호


번호

이름 

전화번호 

홍길동 

01011112222 

2

김철수 

01033334444 

김영희

01055556666 

기본키(2개의 컬럼) - 번호 , 전화번호




④외래키(Foreign Key)
외래키는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.

CONSTRAINT 외래키명 FOREIGN KEY(컬럼명,...)

REFERENCES 참조 테이블(참조 테이블 컬럼명,....)


반 정보 테이블

반 

선생님 

 1

A씨 

 2

B씨 

 3

C씨 


학생 정보 테이블

 번호

이름 

반 

 1

홍길동 

1

 2

김철수 

 3

김영희 

4

학생 정보 테이블에는 반 컬럼이 있고, 반에 대한 정보는 반 정보 테이블에 있다.

만약 전학생이 전학을 와서 학생 정보 테이블에 데이터를 입력하는 와중에 반 정보 테이블에 없는 

반(예를 들어 4반, 5반)을 입력한다면 어떻게 될까? 논리적으로 합당하지 않으며 이 전학생이 들어간 반에 대한 

반 정보를 제대로 찾을 수 없다. 즉 참조 무결성이 깨진다.


하지만 외래키를 생성해 놓으면 반 정보에 없는 반을 입력할 때 오라클은 오류를 발생시켜 잘못된 데이터가 입력되는 것을

방지한다. 참조 무결성을 보장하는 것이다.


외래키에 대한 제약사항은 다음과 같다.

    • 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.
    • 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
    • 여러 컬럼을 외래키로 만들려면, 참조하는 외래키 컬럼의 순서와 개수는 같아야 한다.












'DEV > SQL' 카테고리의 다른 글

[MySQL]MySQL 연산자 - LIKE 연산자  (0) 2018.10.11
[MySQL]리터럴 표기법 - 날짜  (0) 2018.10.11
[MySQL]리터럴 표기법 - 숫자  (0) 2018.10.11
[ORACLE]INSERT ~ SELECT 형태  (0) 2018.01.22
Comments