본문 바로가기

공부/데이터베이스

[오라클로 배우는 데이터베이스 입문] 14. 제약 조건 종류

1. 제약 조건 종류

- 제약 조건이란?

종류 설명
NOT NULL 지정한 열에 NULL을 허용하지 않음, NULL을 제외한 데이터의 중복은 허용됨
UNIQUE 지정한 열이 유일한 값을 가져야 하므로 중복된 값 허용안됨 단, NULL값은 값의 중복에서 제외
PRIMARY KEY 지정한 열이 유일한 값이면서 NULL을 허용하지 않음. PRIMARY KEY는 테이블에 하나만 지정 가능
FOREIGN KEY 다른 테이블의 열을 참조하여 존재하는 값만 입력할 수 있음
CHECK 설정한 조건식을 만족하는 데이터만 입력가능

※데이터 무결성이란? 데이터베이스에 저장되는 데이터의 정확성과 일관성을 보장

종류 설명
도메인 무결성 열에 저장되는 값의 적정 여부를 확인, 자료형, 적절한 형식의 데이터, NULL 여부같은 정해 놓은 범위를 만족하는 데이터임을 규정
개체 무결성 테이블 데이터를 유일하게 식별할 수 있는 기본키는 반드시 값을 가지고 있어야 하며 NULL이 될 수 없고 중복될 수도 없음
참조 무결성 참조 테이블의 외래키 값은 참조 테이블의 기본키로서 존재해야 하며 NULL이 가능

2. 빈 값을 허락하지 않는 NOT NULL

- 테이블을 생성하며 제약 조건 지정

- 반드시 열에 값이 존재해야 하는 경우에 지정

- 제약 조건 확인: USER_CONSTRAINTS데이터사전을 활용

열 이름 설명
OWNER 제약 조건 소유 계정
CONTRAINT_NAME 제약 조건 이름(직접 지정하지 않을 경우 자동 지정)
CONSTRAINT_TYPE 제약 조건 종류
C: CHECK, NOT NULL
U: UNIQUE
P: PRIMARY KEY
R: FOREIGN KEY
TABLE_NAME 제약조건을 지정한 테이블 이름

- 제약 조건 이름 직접 지정

제약 조건 이름 지정하기

- 이미 생성한 테이블에 제약 조건 지정

○ 생성한 테이블에 제약조건 추가하기

○ 생성한 테이블에 제약조건 이름 직접 지정해서 추가하기

○ 생성한 제약 조건의 이름 변경하기

- 제약 조건 삭제

3. 중복되지 않는 값 UNIQUE

- 테이블을 생성하며 제약 조건 지정

UNIQUE 제약조건 생성 및 확인

- 중복을 허락하지 않는 UNIQUE

테이블에 데이터 입력 후 중복 데이터 삽입해보기

- UNIQUE 제약 조건과 NULL값

NULL값 입력은 가능하지만 NULL값에 중복된 데이터 삽입은 불가

- 테이블을 생성하며 제약 조건 이름 직접 지정

- 이미 생성한 테이블에 제약 조건 지정

○ 생성한 테이블에 제약조건 추가하기

○ 생성한 테이블에 제약조건 이름 직접 지정하거나 바꾸기

이름 직접 지정하기
제약조건 이름 수정하기

- 제약 조건 삭제

4. 유일하게 하나만 있는 값 PRIMARY KEY

:NOT NULL과 UNIQUE의 제약조건 특성을 모두 가짐

- 테이블을 생성하며 제약 조건 지정하기

PRIMARY KEY 제약조건지정 시 자동으로 인덱스 만들어 짐

- 테이블을 생성하며 제약 조건 이름 직접 지정하기

제약조건 이름 지정하여 테이블 생성 및 인덱스, 제약조건 생성 확인

- PRIMARY KEY 제약조건을 지정한 열 확인

PRIMARY KEY 제약조건에 중복값을 입력했을 때/NULL값을 입력했을 때

※ CREATE문에서 제약 조건을 지정하는 여러 방식

CREATE TABLE TBL_NAME(
COL1 VARCHAR2(20) CONSTRAINT CS_NAME PRIMARY KEY ----이름 지정
COL2 VARCHAR2(20) CONSTRAINR NOT NULL ---- 이름 지정하지 않음
); 
CREATE TABLE TBL_NAME(
COL1 VARCHAR2(20) ,
COL2 VARCHAR2(20) ,
PRIMARY KEY(COL1), ---- 이름 지정하지 않고 COL1열에 PRIMARY KEY 제약조건 지정
CONSTRAINT CS_NAME UNIQUE (COL2) ---- 이름 지정하고 COL2열에 UNIQUE 제약조건 지정
);

5. 다른 테이블과 관계를 맺는 FOREIGN KEY

: 서로 다른 테이블 간 관계를 정의하는 데 사용하는 제약조건, 특정 테이블의 PRIMARY KEY조건 지정한 열을 다른 테이블의 특정 열에서 참조하겠다는 의미로 지정

EMP 테이블과 DEPT 테이블 제약조건 살펴보기
참조하는 열에 존재하지 않는 데이터 입력해보기

-FOREIGN KEY 지정하기

○ 기본 방법
CREATE TABLE 테이블 이름(열1 열1자료형 CONSTRAINT [제약조건이름] REFERENCES 참조테이블(참조할 열)
);
  제약조건 이름 지정x
CREATE TABLE 테이블 이름(열1 열1자료형 REFERENCES 참조테이블(참조할 열)
);
○ 열 정의 후 제약조건 지정
CREATE TABLE 테이블 이름(열1 열1자료형,
CONSTRAINT [제약조건이름] FOREIGN KEY(열) REFERENCES 참조테이블(참조할 열)
); 

DEPT_FK(DEPTNO)를 참조하는 EMP_FK(DEPTNO) 제약조건 지정

※ 유의점: 테이블을 생성한 직후에는 DEPT_FK(DEPTNO)에 값이 없으므로 EMP_FK(DEPTNO)열에 값을 넣을 수 없음

DEPT_FK(DEPTNO) 데이터 입력 후 EMP_FK(DEPTNO) 입력 가능

- FOREIGN KEY로 참조 행 데이터 삭제하기

DEPTNO를 참조한 데이터가 있기 때문에 삭제가 안됨

참조 행 데이터를 삭제할 수 있는 방법
1. 현재 삭제하려는 열 값을 참조하는 데이터를 먼저 삭제한다.
2. 현재 삭제하려는 열 값을 참조하는 데이터를 수정한다.
3. 현재 삭제하려는 열을 참조하는 자식 테이블의 FOREIGN KEY 제약 조건을 해제한다
↑ 이 방법은 다소 귀찮은 작업이 될 수 있으므로 제약조건 처음 지정 시 옵션을 추가하는 것을 추천

○ 열 데이터를 삭제할 때 이 데이터를 참조하고 있는 데이터도 함께 삭제

CONSTRAINT [제약조건 이름] REFERENCES 참조 테이블(참조할 열) ON DELETE CASCADE

○ 열 데이터를 삭제할 때 이 데이터를 참조하는 데이터를 NULL로 수정

 CONSTRAINT [제약조건 이름] REFERENCES 참조 테이블(참조할 열) ON DELETE SET NULL

6. 데이터 형태와 범위를지정하는 CHECK

: 열에 저장할 수 있는 값의 범위 또는 패턴을 정의할 때 사용

LOGIN_PW열에 3글자 이상만 저장할 수 있도록 CHECK 제약조건 지정
CHECK 제약조건은 C

7. 기본값을 정하는 DEFAULT

: 저장할 값이 지정되지 않는 경우 기본값을 지정할 수 있음

DEFAULT 제약조건 지정한 테이블 생성/ NULL입력과 NULL미입력의 차이점(기본값 입력 확인)

※ 제약조건 비활성화, 활성화하는 법

비활성화
ALTER TABLE 테이블 이름
DISABLE [NOVALIDATE/VALIDATE(선택)] CONSTRAINT 제약조건이름;
활성화
ALTER TABLE 테이블 이름
ENABLE [NOVALIDATE/VALIDATE(선택)] CONSTRAINT 제약조건이름;