제약조건 : 제약조건Constraints은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며 데이터 무결성을 보장하기 위한 용도로 사용된다. 제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK 등이 있다.

 

1. NOT NULL

컬럼을 정의할 때 NOT NULL 제약조건을 명시하면 해당 컬럼에는 반드시 데이터를 입력해야 한다. 즉 반드시 값이 들어 있어야 하는 컬럼에는 NOT NULL 제약조건을 만들어 사용한다. 다음 예제를 보면 NOT NULL 컬럼에 데이터를 넣지 않을 때 발생하는 오류를 확인할 수 있다.

 

● NOT NULL 설정

 

◈ 예제

 

 

 

 

COL_NOT_NULL 에 값을 입력하지 않았을 경우 오류가 발생.

 

 

 

2. UNIQUE

UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. 즉 중복 값을 허용하지 않는다.

 

● UNIQUE 설정

 

UNIQUE 제약조건 역시 데이터베이스 객체이므로, 컬럼 정의 부분에 UNIQUE를 명시하거나 별도로 CONSTRAINTS 키워드를 사용해 정의할 수 있다. UNIQUE와 NOT NULL을 같이 명시하면 해당 컬럼에 들어오는 값은 유일함은 물론 반드시 입력해야 한다. 또한 NULL 허용 컬럼에도 UNIQUE 제약조건을 붙일 수 있다.

 

◈ 예제

 

 

 

 

행을 생성했고 같은 값으로 행을 또 생성할 경우 오류 보고

 

 

3. 기본키(Primary key)

기본키Primary key라고도 하고 영어 그대로 ‘Primary key’라고 한다. 보통 테이블에 키를 생성했다라고 할 때, 이는 기본키를 의미한다. 기본키는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로, 테이블 당 1개의 기본키만 생성할 수 있다.

 

● Primary key 설정

 

DBMS는 데이터 무결성을 보장하고 있다. 데이터 무결성이란 데이터의 정확성과 일관성을 유지한다는 뜻이다. 사원 테이블(employees)에는 사번(employee_id)과 사원명(emp_name) 컬럼이 있는데 특정한 사람을 식별하려면 사번은 반드시 한개이어야 한다. 만약 홍길동이란 사원의 사번이 두 개이거나 사번 자체가 들어가지 않고 데이터가 생성됐다면, 이 홍길동이란 사람을 정확히 식별할 수 있는 방법은 없다. 데이터 무결성을 DBMS에서 실질적으로 구현한 것이 바로 기본키(NOT NULL + UNIQUE)다.

 

◈ 예제

 

 

 

기본키는 NOT NULL이므로 NULL 입력이 불가능 하기때문에 오류보고

 

 

 

4. 외래키(Foreign key)

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

 

● Foreign key 설정

 

사원 테이블에는 부서번호(department_id) 컬럼이 있고, 부서정보는 부서 테이블(departments)에 있다. 만약 신규 사원이 입사해 데이터를 입력하는 와중에 부서 테이블에 없는 부서번호를 입력한다면 어떻게 될까? 논리적으로 봐도 합당하지 않고 이 신입사원에 대한 부서정보를 제대로 찾을 수 없다. 즉 참조 무결성이 깨진다. 하지만 외래키를 생성해 놓으면 부서정보에 없는 부서번호를 입력할 때 오라클은 오류를 발생시켜 잘못된 데이터가 입력되는 것을 방지한다. 참조 무결성을 보장하는 것이다.

 

삭제도 마찬가지다. 사원 테이블에서 사용하고 있는 부서 정보를 부서 테이블에서 삭제하면 무결성이 깨진다. 하지만 외래키를 생성해 놓으면 부서 테이블에서 해당 부서정보를 삭제할 때 오류가 발생해 데이터 삭제를 막아 참조 무결성이 보장된다. 부서 테이블에서 부서번호를 변경하는 것 역시 해당 부서가 참조되고 있다면 수정할 수 없다.

 

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

  • 반드시 참조하는 테이블이 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야 한다.

  • 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.

  • 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.

 

5. CHECK

마지막으로 알아볼 제약조건으로 CHECK가 있다. 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.

 

Check 설정

 

◈ 예제

 

 

 

제약조건에 위반되는 테이터를 넣었더니 오류보고

 

 

조건에 맞는 데이터를 삽입

 

 

'SQL' 카테고리의 다른 글

[SQL 06] INSERT 문  (0) 2020.05.30
[SQL 05] SELECT 문  (0) 2020.05.29
[SQL 03] 테이블 생성˙삭제와 데이터 타입  (0) 2020.05.28
[SQL 02] SQL Developer 간단 사용법 & SQL 언어  (0) 2020.05.28
[SQL 01] schema 구조  (0) 2020.05.27

+ Recent posts