새소식

JAVA 교육/Sql

2019/07/19-DB (제약조건)

  • -

[전 수업] DB의 기초 내용이 가물가물 하여 복습을 해 보았다 

[본 수업] 전에 해보지 않았던 제약조건을 추가하여 테이블 생성 및 오류 종류를 확인해보자 


  • 제약조건(constaint)
    1)정의
    테이블의 해당 칼럼에 원치않는 데이터가 입력/변경/삭제되는 것을 방지하기위해
    테이블 생성 또는 변경시 설정하는 조건
    2)종류
    primary key 기본키      유일성 null값을 인정하지 않음
    (테이블당 1개만 가능)
    foreign key  외래키     자식테이블이 부모테이블 칼럼을 참조
    (특정 데이터만 입력가능)
    ->references 부모테이블(칼럼면)
    unique       유니크       중복을 허용하지 않음 null값을 1번만 허용
    check         체크         특정데이터만 입력가능not null                빈값을 허용하지 않음
  • 주민번호 ->pk
    이메일 핸드폰번호 ->unique로 주는 경우가 많다

# 제약조건을 테이블에 반영 #


3) 제약조건을 반영한 테이블 생성하기

create table c_emp( 
  id       number(5)      constraint c_emp_id_pk primary key 
  ,name    varchar2(25)   constraint c_emp_name_nn  not null 
  ,salary  number(7,2)    default 0  --(데이터가 입력이 안되어있으면) 
  ,phone   varchar2(15)   constraint c_emp_phone_ck  check(phone like '1234-%') 
  ,dept_id number(7)      constraint c_emp_dept_id_fk references dept(deptno) 
);

 

4) 제약조건 이름 검색하기

select *from user_constraints; 
select *from user_constraints where table_name='DEPT'; 
select *from user_constraints where table_name='C_EMP';

 

※테이블에 관련된 제약조건만 선정해서 검색할 수 있다.

 

5) 제약조건은 수정할 수 없고 삭제만 가능함.

alter table c_emp drop constraint c_emp_name_nn;

 

6) 제약조건 추가하기

alter table c_emp add constraint c_emp_name_un unique(name);
       
alter table c_emp modify 
(name varchar2(25) constraint c_emp_name_nn not null);

 ※ not null 제약조건은 add 로 할 수 없고 modify로 가능

 


# 제약조건을 테이블에 반영하지 않고 시작 #


0) 제약조건이 설정되지 않은 테이블 생성 및 행추가

create table c_emp( 
  id       number(5)       
  ,name    varchar2(25)  
  ,salary  number(7,2)  
  ,phone   varchar2(15)  
  ,dept_id number(7)     
); 

 insert into c_emp(id,name) values(1,'개나리'); 
 insert into c_emp(id,name) values(1,'진달래'); 
 insert into c_emp(id,name) values(1,'라일락');

 

1) id칼럼에 pk제약조건 추가

 ※ alter table 테이블이름 add constraint 제약조건이름 제약조건종류(필드명);

alter table c_emp add constraint c_emp_id_pk primary key(id); 


   id가 중복되는걸 막기위해 id 에 primary key를 건다
   
  오류 보고 -ORA-00001: unique constraint (JAVA0514.C_EMP_ID_PK) violated  
  select *from user_constraints where table_name='C_EMP';

 

2) salary칼럼에 check 제약조건

create table c_emp( 
  id       number(5)       
  ,name    varchar2(25)  
  ,salary  number(7,2)  constraint c_emp_salary_ck check(salary between 100 and 1000) 
  ,phone   varchar2(15)  
  ,dept_id number(7)     
);

 insert into c_emp(id,name,salary) values(1,'kim',100); 
 insert into c_emp(id,name,salary) values(1,'lee',1000);
 insert into c_emp(id,name,salary) values(1,'lee',10000);

 

3) name칼럼에 unique 제약조건

create table c_emp( 
  id       number(5)       
  ,name    varchar2(25) constraint c_emp_name_uq unique 
  ,salary  number(7,2)   
  ,phone   varchar2(15)  
  ,dept_id number(7)     
);

 insert into c_emp(name) values('무궁화'); 
 insert into c_emp(name) values('무궁화');

 insert into c_emp(id) values(1); 
 insert into c_emp(id) values(2); 
 select* from c_emp;

 

4) dept_id칼럼에 foreign key 제약조건

 

drop table c_emp; 

create table c_emp( 
  id         number(5)       
  ,name      varchar2(25)  
  ,salary    number(7,2)   
  ,phone     varchar2(15)  
  ,dept_id   number(7)    constraint c_emp_dept_id_fk references dept(deptno)   
);

 insert into c_emp(name,dept_id) values('개나리',10); 
 insert into c_emp(name,dept_id) values('진달래',40); 
 insert into c_emp(name,dept_id) values('라일락',90); 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.