본문 바로가기
SQL/Oracle

오라클 테이블 제약조건(Constraint) 종류 및 작성방법 정리

by wakestand 2019. 10. 14.
반응형

오라클 CREATE TABLE 문을 작성하는 방법은 아래와 같은데

 

CREATE TABLE 테이블명 (

  컬럼명  데이터형 제약조건,
  컬럼명2 데이터형 제약조건
    
);

 

여기서 제약조건(Constraint) 부분을 작성할 시

제약조건의 종류 및 작성하는 방법을 알아보자

 

제약조건은 NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, DEFAULT 가 있는데

전체적으로 보면 다음과 같고

 

CREATE TABLE FOREIGN_TABLE ( -- FOREIGN KEY 사용 시 필요 테이블
  VALUE5 VARCHAR2(10) PRIMARY KEY
);

CREATE TABLE TEST (

  VALUE1 VARCHAR2(10) NOT NULL,    -- NULL 값 들어오지 못하게 함
  VALUE2 VARCHAR2(10) UNIQUE,      -- NULL 허용, 중복 불가
  VALUE3 VARCHAR2(10) PRIMARY KEY, -- NULL, 중복 불가
  VALUE4 VARCHAR2(10) REFERENCES FOREIGN_TABLE (VALUE5),
  -- FOREIGN KEY는 다른 테이블에서 PRIMARY KEY에 해당하고 해당 PRIMARY KEY 컬럼에 있는 값만 사용가능
  VALUE5 VARCHAR2(10) CHECK(VALUE5 BETWEEN 1 AND 10), -- CHECK : 1과 10 사이의 값만 들어올 수 있음
  VALUE6 VARCHAR2(10) CHECK(VALUE6 IN ('A', 'B')),    -- CHECK : A 혹은 B만 들어올 수 있음
  VALUE7 VARCHAR2(10) DEFAULT '홍길동'                -- NULL 값이 들어올 경우 홍길동을 기본 삽입
    
);

 

이제 하나씩 알아보자면

 

1. NOT NULL

해당 컬럼에 NULL값(값을 넣지 않거나 공백처럼 값이 없는 경우)이 들어오지 못하게 함

EX) VALUE1 VARCHAR2(10) NOT NULL

 

2. UNIQUE

NULL은 허용하나 중복은 불가능함

EX) VALUE2 VARCHAR2(10) UNIQUE

 

3. PRIMARY KEY

NULL, 중복 불가능

EX) VALUE3 VARCHAR2(10) PRIMARY KEY

 

4. FOREIGN KEY

NULL 가능, 타 테이블의 PRIMARY KEY여야하고 해당 테이블의 컬럼에 삽입되지 않은 값은 사용 불가

EX) VALUE4 VARCHAR2(10) REFERENCES 참조할_테이블(참조할_테이블의_PRIMARY_KEY)

 

5. CHECK

특정 범위 혹은 특정 값만 들어올 수 있게 함

EX) VALUE5 VARCHAR2(10) CHECK(VALUE5 BETWEEN 1 AND 10)

EX) VALUE6 VARCHAR2(10) CHECK(VALUE6 IN ('A', 'B')) 

 

6. DEFAULT

NULL 값이 들어올 시 지정된 값을 삽입함

EX) VALUE7 VARCHAR2(10) DEFAULT '홍길동'

 

다음으로 이렇게 테이블 작성 후 실제 삽입 시 에러가 나는 경우가 있는데

대표적인 경우는 아래와 같다

 

ORA-02291: integrity constraint violated - parent key not found

- 참조한 테이블의 PRIMARY KEY에 내가 FOREIGN KEY로 지정하려는 값이 없음

EX) FOREIGN_TABLE의 PRIMARY KEY에는 'A' 라는 값만 넣어놨는데

실제 FOREIGN KEY로 사용하려 하는 테이블에서 'B' 라는 값을 FOREIGN KEY로 사용하려는 경우

 

ORA-02290: check constraint violated

- CHECK 조건에 걸린 경우, CREATE TABLE시 작성한 CHECK 조건 확인

 

마지막으로 오라클을 설치하지 않았는데

CREATE TABLE 문을 테스트해 보려면

 

아래 링크의 SQL Fiddle로 이동하자

 

 

SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.

Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.

sqlfiddle.com

이후 상단에 데이터베이스 종류를 Oracle 11g R2로 변경해주면

오라클을 설치하지 않고도 쉽게 테스트 가능하다

반응형

댓글