정의 방법
컬럼 레벨 제약 조건
- 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 |
댓글