티스토리 뷰

IT/DB

[ORACLE] ORACLE의 제약조건(Constraints)

preamtree 2016. 12. 20. 20:00
반응형

 제약조건은 컬럼에 대한 속성을 정의하는 것이며, 데이터 무결성을 보장하기 위한 용도로 사용된다. 다시말해, 제약조건을 설정한다는 것은 테이블이나 속성에 부적절한 데이터가 들어오는 것을 사전에 차단하도록 규칙을 정하는 것이라고 생각하면 된다.


 제약조건은 컬럼의 속성처럼 사용하지만, 엄연히 데이터베이스의 객체이므로 고유의 이름(제약조건 명)을 지정해주어야 한다. 사용자가 지정하지 않는 경우, ORACLE이 자동으로 부여해준다.


1. NOT NULL

 컬럼을 정의할 때(NOT NULL의 경우 오로지 컬럼에만 적용 가능하다. 테이블은 안됨.) NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야만 한다. 반드시 데이터가 들어와야만 하는 컬럼에 명시를 해두면 유용할 것이다. 사용 예는 아래와 같다.


//
/*제약조건 명을 따로 부여하지 않음(ORACLE이 자동으로 부여)*/
CREATE TABLE example1 (
    col1    VARCHAR(10)
    ,col2    VARCHAR(10) NOT NULL
);
 
/*제약조건 명을 따로 부여함(col2_notnull)*/
CREATE TABLE example2 (
    col1    VARCHAR(10)
    ,col2     VARCHAR(10) CONSTRAINT col2_notnull NOT NULL
);


2. UNIQUE

 단어 뜻 그대로 해당 컬럼에 들어가는 값이 테이블 전체에서 유일해야한다는(중복값을 허용하지 않는다는) 의미이다. 당연히 NOTNULL과 함께 사용할 수 있다. 사용 예는 아래와 같다.


//
CREATE TABLE example3 (
    col1    VARCHAR(10) UNIQUE
    ,col2    VARCHAR(10) UNIQUE NOT NULL /* NOT NULL과 함께 부여 */
    ,col3    VARCHAR(10) CONSTRAINT col3_unique UNIQUE(col3)
);



3. PRIMARY KEY

 '기본키'라고 많이 불리는 제약조건이다. UNIQUE+NOTNULL의 형태를 띄며, 테이블 당 1개의 기본키만 생성할 수 있다. 물론, 여러 컬럼을 묶어 하나의 기본키로 만드는 것이 가능하다. (최대 32개 까지 가능하다.) 기본키는 데이터 무결성을 지켜주는 역할을 한다.


 //
CREATE TABLE example4 (
    col1    VARCHAR(10) PRIMARY KEY
    ,col2    VARCHAR(10) 
    ,col3    VARCHAR(10) 
);
 
/*여러 컬럼을 묶을 때는 CONSTRAINT 키워드를 사용*/
CREATE TABLE example5 (
    col1    VARCHAR(10)
    ,col2    VARCHAR(10) 
    ,col3    VARCHAR(10)
    CONSTRAINT PK_example5 PRIMARY KEY(col1, col2) 
);





4. FOREIGN KEY

 '외래키'라고 많이 불리우는 제약조건이다. 테이블 간의 참조 데이터 무결성을 보장해준다. 참조 데이터 무결성 보장을 통해, 참조 관계가 있는 테이블의 데이터 추가, 삭제, 수정을 통제할 수 있다. 아무래도 '관계'에 관한 제약조건이다 보니, 다른 제약조건에 비해 제약사항이 복잡한데, 아래와 같다.


▶ 참조하는 테이블이 먼저 생성되어 있어야 함.


▶ 외래키가 참조하는 컬럼은 참조하는 테이블의 기본키(PRIMARY KEY)이어야 함.


▶ 여러 컬럼을 외래키로 할 경우, 참조하는 테이블의 기본키와 컬럼 개수 및 순서가 같아야 함.


▶ 기본키와 마찬가지로, 최대 32개 컬럼까지 가능.



//
CREATE TABLE example6 (
    col1    VARCHAR(10) PRIMARY KEY
);
 
CREATE TABLE example7 (
    col4    VARCHAR(10)
    ,col5    VARCHAR(10) 
    CONSTRAINT FK_example7 FOREIGN KEY(col4) REFERENCES example6(col1) 
);



5. CHECK

 단어 뜻 그대로, 컬럼에 입력되는 데이터를 CHECK하여 미리 지정된 조건에 맞을 경우에만 입력을 허락하고, 그렇지 않으면 오류를 발생시킨다.


 //
CREATE TABLE example8 (
    col1    NUMBER(10) 
    CONSTRAINT ex8_check CHECK (col1 BETWEEN 1 AND 9)
);

 지금까지 테이블 생성 시, 지정할 수 있는 제약조건에 대해 알아보았다. 본문에서는 생성시에 CONSTRAINT 구문 등을 추가하여 제약조건을 지정하는 것만 예로 들었지만, 테이블 생성 이후에도 ALTER문을 통해 언제든 제약조건을 생성하고, 수정할 수 있다. ALTER문을 통한 제약조건 생성 예제를 마지막으로 아래에 소개한다.






-끝-





출처 및 참고


홍형경, 『오라클 SQL과 PL/SQL을 다루는 기술』, 길벗(2015)

http://hayleyfish.tistory.com/47

http://www.gurubee.net/lecture/1013

https://www.oracle.com

http://www.relationship-economy.com/2013/09/so-what-is-your-biggest-constraint/




«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
글 보관함
Total
743,146
Today
48
Yesterday
236