Oracle DB 8

Integrity

Integrity

DB 자체적으로 강제적인 제약 사항 설정


제약 조건 종류



user_constraints (제약 조건 정보 보유 table)


-- 제약 정보 보기
select constraint_name, constraint_type, table_name
from user_contraints;
/*
		CO : constraint_type
		P : PK
		R : FK
		C : 제약조건
*/


제약 조건 달기


-- table 생성하면서 달기
-- column명 데이터타입 제약조건
-- column명 데이터타입 constraint 제약조건주석 제약조건
create  table emp02(
	deptno number(4) constraint emp02_deptno_PK primary key,
	empno number(4) constraint emp02_empno_nn not null,
	ename varchar2(10) constraint emp02_ename_u unique,
	age number(3) constraint emp01_age_ck check (age between 1 and 100),
	gender char(1) constraint emp01_gender_ck check (gender='F' or gender='M'),
	sal number(4) default 0
);

-- FK 달기
-- column명 데이터타입 constraint 제약조건주석 references 부모테이블(PK)
create table orders(
	customer_id varchar2(4) constraint custromer_fk references customers(customer_id)
);

-- table 단위
create table emp02(
	empno number(4),
	ename varchar2(20) not null,
	deptno number(2),
	constraint emp02_empno_fk foreign key (deptno) references dept(deptno),
	constraint emp02_empno_pk primary key (empno)
);


제약 조건 추가하기


create table dept01 as select * from dept;
create table emp01 as select * from emp;

-- 복제를 해도 제약조건은 복제 불가
select table_name, constraint_type, constraint_name
from user_constraints 
where table_name='DEPT01';

-- dept와 emp처럼 제약조건 추가하기
alter table dept01
add constraint dept01_deptno_pk primary key(deptno);

alter table emp01
add constraint emp01_empno_pk primary key(empno);

--FK 추가하기
alter table emp01
add constraint fk_deptno_emp01
foreign key(deptno) references dept01(deptno);


제약 조건 삭제하기


alter table emp01
drop constraint emp01_empno_pk;


Foreign Key 무시하고 삭제


-- 자식이 사용하지 않는 데이터 삭제 (가능)
delete from dept01 where deptno=40;

-- 자식이 사용하고 있는 데이터 삭제 (불가능)
delete from dept01 where deptno=30;

-- 자식관계 끊고 테이블 삭제
-- 자식 테이블의 FK 제약조건도 사라짐
drop table dept01 cascade constraint;

Discussion and feedback