컴퓨터/SQL

제약조건 : Primary, Foreign, Unique, Check, Not null Key

해피밀세트 2020. 2. 10. 21:33

제약조건을 쓰는 이유 : 데이터의 품질을 좋게 만들기 위해 데이터의 규칙성을 만듬

1. Primary key

  • 테이블 대표키
  • 유일키 , null 허용할수없도록
  • 자동으로 unique index 생성
  • 테이블 하나만 생성

alter table emp add primary key;

--> 제약조건 이름을 적지 않았기 때문에 제약조건 이름이 자동으로 sys_c숫자로 쓰여짐

alter table emp add constraint emp_id_pk primary key(id);

--> 이렇게 제약조건 이름 쓰자

 

 

2. Foreign key (= 외래키, 참조무결성)

  • 동일한 테이블이나 다른 테이블의 primary key, unique key 참조한다.
  • null허용, 중복값 허용
  • 참조하는 키값만 입력/수정해야 한다.
  • 참조하는 키가 있을 경우 참조당하는 row 삭제 못한다.

 

alter table emp add constraint emp_dept_id_fk

foregin key (dept_id) references dept (dept_id);

--> 오류남. dept_id primary key 안걸려있어서

dept_id primary key를 걸고 다시해보자!

alter table dept add constraint dept_id_pk primary key(dept_id);

alter table emp add constraint emp_dept_id_fk

foreign key(dept_id) references dept(dept_id);

 

 

3. Unique key

  • 유일한 값만 체크
  • null 허
  • 자동으로 unique index 생성

alter table dept add constraint dept_name_uk unique (dept_name);

 

 

4. Check key

  • 조건에 값이  true 경우에만 입력(insert), 수정(update) 있다.
  • null 허용, 중복값 허용

alter table emp add sal number;

desc emp

 

alter table emp add constraint emp_sal_ck check (sal > 1000);

select * from user_constraints where table_name = 'EMP'

update emp

set sal = 100

where id = 100;

--> 오류남 체크제약조건 위반되어서

 

update emp

set sal = 10000

where id = 100;

--> 실행됨

 

 

5. Not null key

  • null값을 불허

alter table emp add constraint emp_name_nn not null(name);

--> 오류남

alter table emp modify name constraint emp_name_nn not null;

--> 이렇게 해야함, modify 사용

 


 

제약조건 이름 변경

alter table emp_copy rename constraint copy_emp_pk to emp_copy_pk;

 

제약조건 삭제

alter table emp drop constraint emp_id_pk;

alter table emp drop primary key;

 

insert into emp (id, name, day)

select employee_id, last_name, hire_date

from hr.employees;

권한이 없으면 오류가 난다. 오류을 해결하기 위해서는

1) hr session  접속

2) 객체권한 부여

    grant select on hr.employees to oltp;

    select * from user_tab_privs;

 

제약조건을 포함하나 테이블 만들기

create table dept_new(

dept_id number(3) constraint dept_pk primary key, -- 열레벨 정의

dept_name varchar2(30) constraint dept_nn not null, -- 열레벨 정의

mgr number(5),

constraint dept_uk unique(dept_name)); -- 테이블 레벨 정의

 

 - 열레벨 정의/테이블 레벨 정의 아무거나 사용하면 

 - not null 제약조건은 무조건 열레벨정의 사용

반응형

'컴퓨터 > SQL' 카테고리의 다른 글

오라클 SQL - External Table 연습  (0) 2020.02.11
다중 테이블 INSERT  (0) 2020.02.11
Fedora 30 workstation iso 설치 방법  (0) 2020.02.06
VMware workstation 15 설치방법  (0) 2020.02.06
오라클 SQL JOIN문 정리  (0) 2020.01.30