본문 바로가기

웹개발 풀스택 과정/Database(Oracle)

23일차(2022.01.24) _ DDL - 제약조건

제약 조건

 

- 이상한 (결함이 있는) Data가 입력되는 것을 방지 : 무결성 원칙
- 무결성 원칙을 위반하면 에러 발생시킴

1. 제약 조건 조회
 - SELECT * FROM USER_CONSTRAINTS;
 - SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = '테이블명';

2. 제약 조건 종류
 1) NULL : NULL값 허용, Default
 2) Not Null : NULL값 허용하지 않음
 3) Unique : 같은 값을 허용하지 않음 (중복 불가), NULL 입력 가능 ( NULL도 중복 불가 )
 4) Primary Key : NOT NULL + Unique
 5) Default : 값을 넣지 않으면 기본값 적용
 6) Check : 조건에 맞는 값만 허용 (WHERE절의 조건식과 같은 형식)
 7) Foreign Key
  - 다른 테이블을 참조
  - 다른 테이블과 관계(Relation) 처리시 사용
  - 참조되는 테이블 : 부모테이블
  - 참조하는 테이블 : 자식테이블
  - 부모테이블의 컬럼은 기본키 (Primary Key or Unique) 로 지정된 컬럼이어야 함
  - 부모테이블의 테이블을 삭제하려면 자식테이블에서 참조하는 row가 없어야만 삭제 가능

 

설명1. 제약조건을 사용하는 이유

 

부서가 없는 사원이 있는가?

어떤 사원이든 부서는 꼭 있어야 한다.

사원의 정보에서 DEPARTMENT_ID가 없으면 안된다.

근데 사원의 정보에다 없는 DEPARTMENT_ID의 값을 넣으면 될까? 당연히 안된다.

그래서 만약에 어떤 테이블에 값이 꼭 있어야 한다던가,

어떤 컬럼의 값이 어떤 조건에 따라 정해져야 할 경우에 제약조건이 꼭 필요하다.

 


설명2. 제약조건 보는 방법

 

SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'EMPLOYEES';

 

 

CONSTRAINT_NAME 컬럼을 보면 _ 의 맨 앞은 테이블명, 그리고 다음은 컬럼명, 다음은 제약조건 명이다.

NN은 NOT NULL, UK는 Unique, PK 는 Primary Key 등등 이런식으로 표시해 놓았다.

그리고 SEARCH_CONDITION 에서는 조건들이 나와있다.

 


설명3. Foreign Key

 

EMPLOYEES 테이블에 신규 데이터가 들어오면 DEPARTMENT_ID에 데이터들 넣어야 된다.

그러면 DEPARTMENTS테이블의 DEPARTMENT_ID 컬럼을 참조한다는 소리이다.

만약에 없는 값을 넣으면 안되기 때문에,

참조를 통해서 무조건 DEPARTMENTS 테이블에 있는 값만을 넣을 수 있게 만들어준다.