본문 바로가기

자바 웹 개발자가 될거야/DB

[Oracle] 테이블 제약조건 / 컬럼레벨 테이블레벨

 

< 테이블 제약조건 >

 

- 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약

- 제약조건 종류 : Primary Key, Foreign Key, Unique, Not Null, Check

- 제약조건 선언 시기 :  테이블 생성 시(Create table ~) 혹은 테이블 생성 후(Alter table~)에 가능하다.  

- 제약조건명

  · 사용자 지정으로 고유하고 의미있는 이름 부여하는 것이 좋다

  · ex) 테이블약자_컬럼약자_제약조건유형약자

  · 사용자가 생략시 Oracle이 자동으로 부여함

 

 

① 제약조건 유형

 

- NOT NULL 

  · 컬럼안에 NULL이 들어가지 못하도록 설정

  · 컬럼레벨 문법만 가능

 

id number(10) CONSTRAINT emp_id_nn NOT NULL

 

 

- UNIQUE

  · 중복된 컬럼값을 허용하지 않지만 여러 개의 NULL값은 허용한다

  · 고유 인덱스가 생성됨

 

phonenum varchar2(20) CONSTRAINT emp_phnum_uk UNIQUE

 

 

- PRIMARY KEY

  · 기본키 제약조건

  · NOT NULL + UNIQUE 성격을 가짐

  · 테이블에 한번만 선언 가능

 

id number(10) CONSTRAINT emp_id_pk PRIMARY KEY

 

 

- FOREIGN KEY

  · 외래키 제약조건

  · 자기 자신 테이블이나 다른 테이블의 특정 컬럼(PK, UK)을 참조하는 제약조건

  · 참조하는 테이블명 ( 참조하는 컬럼명 ) 필요

 

// 컬럼레벨 문법
department_id NUMBER(4) CONSTRAINT emp_deptid_fk REFERENCES departments(department)id)


// 테이블레벨 문법
department_id NUMBER(4),
CONSTRAINT emp_deptid_fk FOREIGN KEY (department_id) REFERENCES departments(department)id)

 

 

- CHECK

  · 컬럼값의 조건이나 범위를 줄 수 있음

  · WHERE절 형식과 같다고 생각하면 됨

 

salary number(10) constraint emp_sal_ck check (salary > 0)

jumin varchar2(13) constraint emp_ju_ck check (length(jumin) = 13)

gender varchar2(10) constraint emp_gen_ck check (gender IN ('남', '여'))

grade number(5) constraint emp_grd_ck check (grade between 1 and 3)

 

 

② 컬럼레벨 & 테이블레벨

 

- 컬럼레벨은 열별로 제약조건 지정

- 가능한 조건 : NOT NULL, PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK

 

CREATE TABLE employees(
	employee_id NUMBER(6)
    	CONSTRAINT emp_empid_pk PRIMARY KEY,
    first_name VARCHAR(20)
);

 

 

- 테이블레벨은 컬럼정의와는 별개로 지정

- 가능한 조건 : PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK 

- 복합키 지정할 때는 테이블레벨로 지정해야함

 

CREATE TABLE employees(
	employee_id NUMBER(6),
    first_name VARCHAR2(20),
    ...
    job_id VARCHAR2(10) NOT NULL,
    CONSTRAINT emp_empid_pk PRIMARY KEY(EMPLOYEE_ID)
);