본문 바로가기

DB/오라클

[ORACLE]데이터 무결성과 제약조건

무결성 제약 조건

  • NOT NULL 
  • UNIQUE :  모든 로우에 대해서 유일한 값을 갖도록 함
  • PRIMARY KEY : NOT NULL + UNQUE
  • FOREIGN KEY : 참조되는 테이블에 칼럼값이 항상 존재해야 한다.
  • CHECK : 저장가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용

 

칼럼레벨에서의 제약조건

create table dept_second(
	dno number(2) constraint dept_second_pk primary key,
    dname varchar2(14),
    loc varchar(13));

테이블레벨에서의 제약조건-해당하는 컬럼의 이름을 () 안에 넣어줘야함 , NOT NULL  정의 불가

create table dept_third(
	dno number(2),
    dname varchar2(14),
    loc varchar2(13),
    constraint dept_third_pk primary key(dno));--해당칼럼 dno 괄호에 명시

 

제약조건 이름 지정 : constraint 테이블명_컬럼명_제약조건유형,이름지정하지 않을시 자동으로 SYS_Cn 생성

create table customer2(
id varchar2(20) constraint customer2_id_pk primary key,--컬럼레벨
pwd varchar2(20) constraint customer2_pwd_nn not null,
name varchar(20) constraint customer2_name unique);

테이블에 정의된 제약조건 확인

select table_name, constraint_name, constraint_type--P(=PK 기본키), R(=FK 참조키),C(=NOT NULL),U(=UNIQUE)
from USER_constraintS --사용자(system)가 소유한 '제약조건'정보
where table_name in('CUSTOMER2');--테이블명 대문자로 검색

NOT NULL  테이블레벨에서의 제약조건정의 불가

create table customer(
	id varchar(20) not null,
    pwd varchar(20) not null,
    name varchar(20) not null,
    phnoe varchar(30),
    address varchar(100));
    
    
위의 테이블 데이터추가
insert into customer
values(null,null,null,'010-111-1111','seoul'); --에러

UNIQUE

null 허용 , 중복된 값 허용X

create table customer2(
id varchar2(20) constraint customer2_id_uk unique);


PRIMARY KEY (unique + not null)index번호 자동생성됨

 

컬럼레벨- pk 

create table customer2(
id varchar2(20) constraint customer2_id_pk primary key);

테이블레벨 - pk2개 이상

create table customer2(
id varchar2(20),
pwd varchar2(20) constraint customer2_id_pwd_nn not null,
name varchar2(20)constraint customer2_id_name_nn not null,
phone varchar2(30),
address varchar2(100),

--테이블 레벨
constraint customer2_id_pk primary key(id) --★★해당하는 컬럼의 이름을 괄호에 넣어줘야 함
constraint customer2_id_pk primary key(id,name)--기본키가 2개 이상일때 테이블레벨 사용
);

FOREIGN KEY 제약조건

참조무결성 '사원테이블의 부서번호는 언제나 부서테이블에서 참조가 가능해야한다'

부모테이블의 컬럼값을 참조하며 그 컬럼은 기본키(primary key)나 유일키(unique)로 설정되어있어야 함

create table emp_second(
	ename varchar2(19),
	job varchar2(9)
	dno number(2) constraint emp_second_dno_fk reference department);

CHECK 제약조건

데이터의 범위나 조건을 정의

currval, nextval, rownum 사용불가
sysdate 함수 사용 불가

create table emp_second(
 eno number(4) constraint emp_second_eno_pk primary key,
 ename varchar2(10),
 salary number(7,2) constraint emp_second_salary_min check(salary>0));
 --check제약 조건 salary가 0 이상이어야 함.

DEFAULT 제약조건

create table emp_second(
 eno number(4) constraint emp_second_eno_pk primary key,
 ename varchar2(10),
 salary number(7,2) default 1000);

--default 값 넣는 방법
insert into emp_second(eno,ename,job,dno)values(6,'권','인사',10);--생략된 salary는 1000
insert into emp_second(6,'권','인사',default,10); --default 대신 1000입력됨