본문 바로가기
  • Let's study
데이터베이스/Oracle

[Oracle] Integrity Constraints(데이터 무결성 제약조건)

by 코딩고수이고파 2022. 4. 19.

정의 방법

컬럼 레벨 제약 조건

  • NOT NULL은 컬럼 레벨에서만 정의 가능
Column datatype [CONSTRAINT constraint_name] constraint_type

테이블 레벨 제약 조건

  • NOT NULL을 제외한 나머지 제약조건 정의 가능
Column datatype,
...
[CONSTRAINT constraint_name] PRIMARY KEY(column1 [, column2, ...])

 

데이터 무결성 제약조건

  • NOT NULL
  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • CHECK

NOT NULL

  • 컬럼 레벨 제약조건(테이블 레벨에서 정의하면 오류)
  • 컬럼에서 NULL을 허용하지 않음
  • 제약조건을 명시하지 않을 경우 NULL 허용
Column datatype [CONSTRAINT constraint_name] NOT NULL

실제로 선언해보면 아래와 같이 TITLE 컬럼에 NOT NULL 조건이 들어가 있는 것을 볼 수 있다.

이번엔 직접 데이터를 삽입해보자.

author 컬럼에만 데이터를 삽입하려고하자 PRAC 계정의 BOOK1테이블에 있는 TITLE 컬럼에 데이터를 삽입할 수 없다고 에러가 뜬다.

title과 author 둘 다 삽입하면 잘 들어간 것을 확인할 수 있다.

PRIMARY KEY

  • 테이블 당 하나만 존재할 수 있다.
  • RECORD을 유일하게 식별하는 컬럼
    • UNIQUE와 NOT NULL 동시에 만족
Column datatype [CONSTRAINT constraint_name] PRIMARY KEY (column1 [, column2, ...])
Column datatype,
...
[CONSTRAINT constraint_name] PRIMARY KEY (column1 [, column2, ...])

PRIMARY KEY도 위에서의 NOT NULL과 똑같이 title을 포함하여 데이터를 삽입하지 않으면 오류가 발생한다.

FOREIGN KEY

  • PRIMARY KEY를 참조하는 컬럼
  • 참조하는 컬럼의 type과 동일해야 함
  • FOREGIN KEY에 참조되고 있는 PRIMARY KEY는 삭제할 수 없음
  • ON DELETE CASCADE이 함께 정의된 외래키는 PRIMARY KEY가 삭제될 때 같이 삭제됨

UNIQUE

  • 데이터의 유일성 보장
  • 중복되는 데이터는 존재할 수 없음
  • PRIMARY KEY와 유사하나 NULL 허용

CHECK

  • 컬럼의 값을 특정 범위로 제한

 

제약 조건 변경

ADD

  • 새로운 제약 조건 추가

DROP

  • 제약 조건 삭제

 

제약 조건 확인

sys.user_constraints

컬럼 의미
owner 제약 조건을 소유하는 사용자
constraint_name 제약 조건 이름
constraint_type 제약 조건 유형 (U, C, P, R)
table_name 제약 조건이 속한 테이블
search_condition constraint_type이 C인 행에 대해 각각의 조건을 나타냄
r_constraint_name 제약 조건 FK가 참조하는 PK 표시

제약 조건의 약자

제약 조건 약어 constraint_type 컬럼 값
NOT NULL _NN C
UNIQUE _UK U
PRIMARY KEY _PK P
FOREIGN KEY _FK R
CHECK _CK C

sys.user_cons_columns

  • 어떤 컬럼에 어떤 제약 조건들이 정의되어 있는지 보여주는 데이터 사전

 

제약 조건 DISABLE / ENABLE

  • 제약 조건을 삭제하지 않고, 적용시키거나 적용되지 않도록 할 수 있음
  • 제약 조건을 적용시키지 않으려면 DISABLE, 적용시키려면 ENABLE
  • DISABLE 후 ENABLE 실행 전까지는 로그아웃 해도 DISABLE이 유효함
ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

조건을 DISABLE한 상태에서 조건에 위배되는 데이터를 삽입하고 다시 ENABLE하면 ENABLE이 적용되지 않는 오류가 발생한다.

'데이터베이스 > Oracle' 카테고리의 다른 글

[Oracle] 날짜 처리 함수  (0) 2022.04.23
[Oracle] 숫자 처리 함수  (0) 2022.04.22
[Oracle] 문자 처리 함수  (0) 2022.04.21
[Oracle] Sub Query  (0) 2022.04.18
[Oracle] Join  (0) 2022.04.17

댓글