본문 바로가기
개발자 양성과정 필기노트/DB | ORACLE

제약조건

by jono 2021. 9. 13.

DB  ||  DAY12  ||  제약조건


 # 제약조건 선언시기 

1. 테이블 생성시 - CREATE TABLE . . .

2. 테이블 생성 후 - ALTER TABLE . . .


 # 제약조건의 유형 

1. NOT NULL - 팔수정보인 컬럼에 선언함.

 

2. UNIQUE - 중복되는 데이터가 허용되지 않는 컬럼에 선언함. ex) 주민번호, 이메일 등

 

3. PRIMARY KEY - NOT NULL + UNIQUE 의 성격을 가짐.

 

4. FOREIGN KEY - 부모컬럼을 참조하는, 자식컬럼임.
   *** 이때, 참조대상인 부모컬럼은 PRIMARY KEY or UNIQUE 제약조건이 걸려있어야한다.

# 컬럼레벨 *** FOREIGN KEY 키워드 사용하지 않음!
create table . . .
department_id number(4) CONSTRAINT emp_dept_fk
REFERENCES departments(department_id),
. . .

# 테이블레벨
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),

 

5. CHECK - 해당컬럼이 만족했으면 하는 조건을 부여함.

# 컬럼레벨
salary number(10) CONSTRAINT a_sal_ck (salary 조건문지정) ,
성별 varchar2(10) constraint ____ check (성별 in('남','여'),

# 테이블레벨
salary number(10),
CONSTRAINT a_sal_ck CHECK(salary 조건문지정), . . . 


 # 제약조건명 선언 

1. 생략해도 무방하다.- Oracle 자동부여. ( sys_cXXXXXX 형태 ) 

2. 사용자 지정이 권장사항이다. -> ( 대부분 테이블_컬럼_제약조건 형태로 함. )


 # 제약조건 선언 문법 

 1. 컬럼레벨 문법 

- NOT NULL 가능

CREATE TABLE 테이블명
	(컬럼명 테이터타입(컬럼사이즈) CONSTRAINT 제약조건명 제약조건유형,
         . . . )

CREATE TABLE my_emp
	(employee_id  number(10)  CONSTRAINT  emp_empId_pk  Primary Key , 
         . . . )

 

 2. 테이블레벨 문법 

-마지막에 컬럼명을 한번 더 언급한다.

- NOT NULL 불가능

CREATE TABLE 테이블명
	(컬럼명1  데이터타입(컬럼사이즈),
     컬럼명2  데이터타입(컬럼사이즈),
     . . . , 
     CONSTRAINT 제약조건명  제약조건유형  ( 컬럼명1 ) );
ex)  CONSTRAINT emp_empId_pk  Primary Key  (employee_id)

 # 제약조건 확인하기 

DESC user_constraint;

 

 - 입력한 테이블에 해당하는 테이블의 제약조건을 출력하기 

SELECT constraint_name, constraint_type, search_condition, r_constraint_name
FROM user_constraints
WHERE UPPER(table_name) = UPPER('&table_name');

 

 

댓글