본문 바로가기
개발/데이타베이스

DB 제약조건 [펌]

by 로그인시러 2017. 3. 8.

제약조건 (Constraint) 이란?

제약조건이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해 놓는거라 생각하면 된다. 간단하게 테이블안에서 테이터의 성격을 정의하는 것이 바로 제약조건 이다.

  • - 제약조건은 데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질 이다.
  • - 모든 제약조건은 데이터 사전(DICTIONARY)에 저장 된다.
  • - 의미있는 이름을 부여했다면 CONSTRAINT를 쉽게 참조할 수 있다.
  • - 표준 객체 명명법을 따르는 것이 좋다.
  • - 제약조건은 테이블을 생성할 당시에 지정할 수도 있고, 테이블 생성 후 구조변경(ALTER)명령어를 통해서도 추가가 가능하다.
  • - NOT NULL제약조건은 반드시 컬럼 레벨에서만 정의가 가능하다.

NOT NULL 조건

컬럼을 필수 필드화 시킬 때 사용 한다.

 
-- NOT NULL제약조건을 설정하면 ename 컬럼에는 꼭 데이터를 입력해야 한다.
-- emp_nn_ename을 제약조건 명으로 설정 하였다.
SQL> CREATE TABLE emp3(
     ename VARCHAR2(20)  CONSTRAINT emp_nn_ename NOT NULL );
        
-- 제약조건은 USER_CONSTRAINTS 뷰를 통해서 확인 할 수 있다.
SQL> SELECT CONSTRAINT_NAME
     FROM    USER_CONSTRAINTS
     WHERE  TABLE_NAME ='EMP3' ;

CONSTRAINT_NAME
-----------------------
emp_nn_ename 
    

UNIQUE 조건

데이터의 유일성을 보장(중복되는 데이터가 존재할수 없다) 되고, 자동으로 인덱스가 생성 된다.

  	
--  deptno 컬럼에 UNIQUE 제약조건 생성
SQL> ALTER TABLE emp2
     ADD CONSTRAINT emp2_uk_deptno UNIQUE (deptno);

-- 제약 조건의 삭제
SQL> ALTER TABLE emp2
     DROP CONSTRAINT emp2_uk_deptno;
	

CHECK 조건

컬럼의 값을 어떤 특정 범위로 제한할 수 있다.

 	
-- comm 컬럼에 1에서 100까지의 값만을 가질수 있는 체크조건 생성	
SQL> ALTER TABLE emp2
     ADD CONSTRAINT emp2_ck_comm
     CHECK (comm >= 1 AND comm <= 100);

-- 제약 조건의 삭제
SQL> ALTER TABLE emp2
     DROP CONSTRAINT emp2_ck_comm;

-- 10000,20000,30000,40000,50000의 값만을 가질수 있는 체크조건 생성
SQL> ALTER TABLE emp2
     ADD CONSTRAINT emp2_ck_comm
     CHECK comm IN (10000,20000,30000,40000,50000);    	
    

DEFAULT(컬럼 기본값) 지정

데이터를 입력 하지 않아도 지정된 값이 기본으로 입력 된다.

 
-- hiredate 컬럼에 값을 입력하지 않아도 오늘 날짜가 입력된다.
SQL> CREATE TABLE emp4(
     ... (컬럼생략) ...,
     hiredate DATE DEFAULT SYSDATE );     
    

PRIMARY KEY 지정

  • - 기본키는 UNIQUE 와 NOT NULL의 결합과 같다.
  • - 기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을 가지고 있다. 이를 참조 무결성이라 한다.
  • - UNIQUE 조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성하며, 그 이름은 기본 키 제약 조건의 이름과 같다.
  • INDEX: 검색 키로서 검색 속도를 향상 시킨다.(UNIQUE,PRIMARY KEY 생성시 자동적으로 생긴다.)
 
-- PRIMARY KEY 생성 예제
SQL> CREATE TABLE emp5(
     empno NUMBER CONSTRAINT emp5_pk_empno PRIMARY KEY );     
    
 
-- ALTER TABLE 명령어로 PRIMARY KEY 생성 예제
ALTER TABLE emp2
ADD CONSTRAINT emp2_pk_empno  PRIMARY KEY (empno) ;
    

FOREIGN KEY(외래 키)지정

  • - 기본키를 참조하는 컬럼 또는 컬럼들의 집합이다.
  • - 외래키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터형과 일치해야 한다. 이를 어기면 참조무결성 제약에의해 테이블을 생성할수 없다.
  • - 외래키에 의해 참조되고 있는 기본 키는 삭제 할 수 없다.
  • ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제 될 때 같이 삭제 된다.
 
-- emp 테이블의 deptno 컬럼이 dept 테이블에 deptno 컬럼을 참조하는 외래키 생성
SQL> ALTER TABLE emp2 ADD CONSTRAINT emp2_fk_deptno
     FOREIGN  KEY (deptno) REFERENCES dept(deptno);      
    

제약 조건의 확인

  • USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건 조회.
  • USER_CONSTRAINTS : 유저가 소유한 모든 제약 조건 조회.
  
SQL> SELECT SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,  
            DECODE(B.CONSTRAINT_TYPE,
                'P','PRIMARY KEY',
                'U','UNIQUE KEY',
                'C','CHECK OR NOT NULL',
                'R','FOREIGN KEY') CONSTRAINT_TYPE,  
            A.CONSTRAINT_NAME  
     FROM  USER_CONS_COLUMNS A, USER_CONSTRAINTS B  
     WHERE A.TABLE_NAME = UPPER('&table_name') 
       AND A.TABLE_NAME = B.TABLE_NAME  
       AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME  
     ORDER BY 1;  

-- 테이블 명을 입력 하면 됩니다.
table_name의 값을 입력하십시오: emp2
 
COLUMN_NAME         CONSTRAINT_TYPE    CONSTRAINT_NAME
------------------- -----------------  --------------
DEPTNO              CHECK OR NOT NULL  SYS_C001362   
                    FOREIGN KEY        EMP2_FK_DEPTNO
EMPNO               PRIMARY KEY        EMP2_PK_EMPNO
ENAME               CHECK OR NOT NULL  EMP2_NN_ENAME
MGR                 UNIQUE KEY         EMP2_UP_MGR    
    


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

'개발 > 데이타베이스' 카테고리의 다른 글

OPTIMIZER  (0) 2017.03.09
클러스터드 인덱스와 넌클러스터드 인덱스  (0) 2017.03.09
DB INDEX 정리 [펌]  (0) 2017.03.08
WM_CONCAT() 의 결과에 ORDER BY 먹이고 싶을 때 ...  (0) 2017.03.08
oracle substr  (0) 2017.03.08

댓글