본문 바로가기

BackEnd/DataBase - Oracle

[Oracle] 제약 조건 (Constraint)

제약 조건명을 명시해주지 않을 경우 ORACLE에서는 자동으로 이름을 부여
제약 조건명은 중복될 수 없으며 제약 조건명이 곧 오브젝트 이름이다

제약 조건명은 일반적으로 '테이블명_대상컬럼_제약조건 종류'를 줄여서 쓰는 것이 암묵적인 규칙
(Ex: 테이블 employees, 컬럼 last_name, 제약조건 NOT NULL => emp_ln_nn)

테이블당 한 번만 쓸 수 있는 경우 Table-Level에서 묶어줘야하고
특별한 경우가 없으면 Column-Level에서 실행한다

 


제약조건 조회 구문 (오브젝트명, 타입, 조건설명)

 

타입 코드 설명
C Check on a table 
O Read Only on a view 
P Primary Key 
R Referential AKA Foreign Key 
U Unique Key 
V Check Option on a view 

 

SELECT constraint_name, constraint_type, search_condition 
FROM user_constraints 
WHERE table_name = 'TEST2'; 



쿼리로 구조를 조회할 때

SELECT * FROM cols WHERE table_name = 'EMP2'; 



테이블은 DB에 저장될 때 무조건 대문자로 저장되기 때문에 조회할 때도 마찬가지로 대문자로 조회한다
외래키가 참조하는 제약조건명도 조회하고 싶다면 SELECT절에 'r_constraint_name' 추가하면 된다



1. NOT NULL

테이블에는 불가능하고 오로지 컬럼에만 적용 가능하며
반드시 데이터가 입력되어야만 하는 컬럼에 명시를 해두는 것이 좋다

 


기본 문법

 

CREATE TABLE 테이블명 (컬럼명 데이터타입(사이즈) 오브젝트명 NOT NULL); 

 



2. PRIMARY KEY

'기본키'라고 많이 불리는 제약조건이며 UNIQUE + NOT NULL의 형태를 띄며
테이블당 1개의 기본키만 생성할 수 있다

여러 컬럼을 묶어 하나의 기본키로 만드는 것도 가능하다 (최대 32개)
기본키는 데이터 무결성을 지켜주는 역할을 한다

단일 기본키

CREATE TABLE test ( 
	id NUMBER(10) CONSTRAINT t_id_pk PRIMARY KEY, 
	name VARCHAR2(30) CONSTRAINT t_name_pk PRIMARY KEY, 
	job VARCHAR2(30) 
); 



그룹으로 묶어 준 기본키

CREATE TABLE test ( 
	id NUMBER(10), 
	name VARCHAR2(30), 
	job VARCHAR2(20) CONSTRAINT test_pk PRIMARY KEY(id, name) 
); 




3. UNIQUE

해당 컬럼에 들어가는 값이 테이블 전체에서 유일해야한다는 의미 (중복 값을 허용하지 않음)

CREATE TABLE test ( 
	id NUMBER(10), 
	name VARCHAR2(30) CONSTRAINT UNIQUE NOT NULL -- NOT NULL과 함께 부여해줬음 
); 




4. FOREIGN KEY

'외래키'라고 많이 불리는 제약 조건이며 테이블간의 참조 데이터 무결성을 보장해준다

참조 관계가 있는 테이블의 데이터 추가, 삭제, 수정을 통제할 수 있고
아무래도 관계에 관한 제약조건이다 보니 다른 제약조건에 비해 제약사항이 있으며 아래와 같다

- 참조하는 테이블이 먼저 생성되어야 함
- 외래키가 참조하는 컬럼은 참조하는 테이블의 기본키 또는 유니크 제약조건이어야함
- 여러 컬럼을 외래키로 할 경우 참조하는 테이블의 기본키와 컬럼 개수 및 순서가 같아야 함
- 기본키와 마찬가지로 최대 32개 컬럼까지 가능

CREATE TABLE test4 ( 
	col1 VARCHAR(10) PRIMARY KEY 
); 

CREATE TABLE test5 ( 
	col4 VARCHAR(10), 
	col5 VARCHAR(10) 
	CONSTRAINT FK_example7 FOREIGN KEY(col4) REFERENCES test4(col1) 
); 




5. CHECK

컬럼에 입력되는 데이터를 체크하여 미리 지정된 조건에 맞을 경우에만 입력을 허용하고
그렇지 않은 경우 오류를 발생시킨다

CREATE TABLE test6 ( 
	col1    NUMBER(10) 
	CONSTRAINT t6_check CHECK (col1 BETWEEN 1 AND 9) 
);