[Oracle] 제약조건

devheyrin·2022년 7월 30일
0

Oracle

목록 보기
5/10

제약조건

  • 컬럼 단위 설정 (제약조건 & 인덱스)
  • 데이터 신뢰성을 높이기 위한 것 - 중복을 허용하지 않는 제약 조건 등
  • 데이터 무결성을 구현할 수 있다.

1. 개체 무결성

  • not null : null 불가능, 중복 가능
  • unique : 중복 불가능, null 가능
    • MS SQL - null도 중복 불가능
  • primary key (기본키)
    • 기본키는 not null + unique 이어야 한다.
    • BUT not null + unique → 기본키가 되는 것은 아님!
    • 하나의 테이블에는 하나의 기본키가 있어야 한다.

2. 영역 무결성

  • check : 영역 내의 유효한 값을 체크. 조건을 지정해주어야 한다. null 은 가능
  • default : 입력(insert)시 제외되면 기본으로 들어가는 값을 지정

3. 참조 무결성

  • foreign key (참조키) : 다른 컬럼을 참조
    • 참조하려는 컬럼은 반드시 기본키여야 한다.
    • 입력, 생성은 부모가 있어야 자식이 가능
    • 수정, 삭제는 자식이 없어야 부모가 가능
    • delete cascade - 부모를 삭제할 때 부모를 참조하던 자식까지 전부 삭제
    • update cascade - 부모를 수정할 때 부모를 참조하던 자식까지 전부 수정 (Oracle 불가능)
      • 오라클에서 update cascade는 트리거로 구현

제약조건 부여

  1. 컬럼 단위 : 컬럼 속성처럼 추가
    • 제약명 : table_col_제약
    • 모든 제약 가능
    create table ex(id number(3) [constraint 제약명] primary key, ...);
  1. 테이블단위 : 컬럼 추가할때처럼 추가
    • not null 불가능 (not null 은 컬럼 단위로만 가능)
    • 복합컬럼 제약인 경우 - 두 개 이상의 컬럼에 하나의 제약을 주는 경우
    create table ex(id  number(3), .... , [constraint 제약명] primary key(id)); 

제약조건 수정

  1. not null
    • 컬럼 대상 설정만 가능
    
    alter table student 
    modify jumin_no_varchar2(14) [ [constraint student_juminNo_nn] not null | null ]; 
    
  1. not null 을 제외한 모든 제약조건
    • 테이블 대상 설정 가능
    • 컬럼을 삭제, 추가, 수정하듯이 제약조건 삭제, 추가, 수정 가능
    alter table student
    --add constraint student_jumin_no unique(jumin_no);
    --drop constraint student_jumin_no;

문법

컬럼 단위 제약조건

  1. 학생 테이블
create table student
				(hakbun number(10) constraint student_hakbun_pk primary key, 
				 sname varchar2(20) constraint student_sname_nn not null, 
				 jumin_no varchar(14) constraint student_jumin_no unique,
				 birth_area varchar(20) default '서울',
				 age number(3) constraint student_age_ck check(age >= 20 and age <= 30));
  1. 도서 테이블
create table library(
   sno number(10) constraint library_sno_fk references student(hakbun),
   book_name varchar2(50) not null,
   loan_date date default sysdate,
);

테이블 단위 제약조건

  1. 학생 테이블
create table student(
   hakbun number(10),
   sname varchar2(20) constraint student_sname_nn not null,
   jumin_no varchar2(14),
   birth_area varchar2(20) default '서울',
   age number(3),
   constraint student_hakbun_pk primary key(hakbun),
   constraint student_jumin_no unique(jumin_no),
   constraint student_age_ck check(age>=20 and age<=30)
);
  1. 도서 테이블
create table library(
   sno number(10),
   book_name varchar2(50) not null,
   loan_date date default sysdate,
   constraint library_sno_fk foreign key(sno) references student(hakbun)
);

실습

create table dept(
	deptno number(3),
	dname varchar2(10),
	loc varchar2(10),
	constraint dept_deptno_pk primary key(deptno),
	constraint dept_dname_no unique(dname)
);
create table sawon(
	sabun number(3), 
	saname varchar2(10) not null,
	deptno number(3),
	sajob varchar2(10),
	sapay number(10),
	sahire date default sysdate,
	sasex varchar2(4), 
	samgr number(3),
	constraint sawon_sabun_pk primary key(sabun),
	constraint sawon_deptno_fk foreign key(deptno) references dept(deptno),
	constraint sawon_sasex_ck check(sasex = '남자' or sasex = '여자'),
	constraint sawon_samgr_fk foreign key(samgr) references sawon(sabun)
);
create table gogek(
	gobun number(3),
	goname varchar2(10),
	gotel varchar2(14),
	gojumin varchar2(14), 
	godam number(3),
	constraint gogek_gobun_pk primary key(gobun),
	constraint gogek_gojumin_no unique(gojumin),
	constraint gogek_godam_fk foreign key(godam) references sawon(sabun)
);
profile
개발자 헤이린

0개의 댓글