초급의 끄적거림

[SQL] 제약조건 (constraint) 1 본문

DB/Oracle

[SQL] 제약조건 (constraint) 1

codingD 2019. 7. 19. 16:33

[★★ 제약조건 (constraint) ★★

 1) 정의 : 테이블의 해당 칼럼에 원치 않은 데이터가 입력/변경/삭제 되는 것을 방지하기 위해 테이블 생성 또는 변경시 설정하는 조건 (최대한 무결한 DB를 만들기 위해 제약조건 설정, 강제성 有)

 

 2) 종류 

primary key - 기본키, 유일성, null 값을 인정하지 않음 (=px)
- 테이블당 1개만 가능
foreign key - 외래키, 자식테이블이 부모테이블 칼럼을 참조
- references 부모테이블(칼럼명)
unique - 중복을 허용하지 않음 (pk와 비슷하지만 pk는 절대로 null을 허용하지 않고 unique는 null 값 1번 허용, 두 번은 중복이라서 안 됨)
- 테이블에 1개 이상 가능
check 특정 데이터만 입력가능
not null 빈 값을 허용하지 않음

  +) default는 조건이라고 보기는 어려움

 

[제약조건을 테이블에 반영]

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

  - 주로 만드는 조건 형식 :  constraint 테이블명_칼럼명_제약조건줄임말 primary key (제약조건)

   → constraint 테이블명_칼럼명_제약조건줄임말 : 이름을 주는 것, 굳이 필요는 없음 (자동 생성)

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)
);

주석>

id~~ primary key  - 칼럼명 한글X, number(5) : 최대 5자리까지 허용 (0~99999)
 - id의 성격이 특정된 것이기 때문에 유일성을 가지고 있는 제약조건 primary key 이용
name ~ not null  - 이름도 pk를 사용할 수 있지만 이름은 동명이인의 경우가 있어서 pk, unique 빈도 ↓, 주로 not null 사용
salary ~ default 0  - default 0 : 제약 조건이라하기는 어렵지만 데이터가 아무 값도 들어오지 않으면 0을 넣으라는 의미
phone ~check  - default 0 : 제약 조건이라 하기에는 어렵지만 데이터가 아무 값도 들어오지 않으면 0을 넣으라는 것.
 - '1234-%' : 앞글자가 반드시 1234- 로 시작해야한다는 의미
 - check() 의 괄호에는 기본적으로 사용하는 sql문이 들어갈 수 있음 
dept_id ~ references  - dept가 있는 부모테이블을 아직 안 만들었기 때문에 오류 발생 
  ※ 오류보고 -ORA-00942: table or view does not exist   
 - 부모테이블이 없을 때는 오류가 나다가 부모테이블 (dept)을 만들고 난 뒤에는 오류없이 테이블이 생성되는 것을 볼 수 있음

 

2) 제약조건 이름 검색

  - 제약조건 목록 확인 (데이터사전)

select * from user_constraints;  - 접두어가 user인 경우, 사용자가 만든 제약조건을 검색

select * from user_constraints where table_name='DEPT';  -- table_name이 DEPT 인 것의 제약조건의 목록
select * from user_constraints where table_name='C_EMP'; -- table_name이 C_EMP 인 것의 제약조건의 목록

 

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

  - alter table 테이블명 drop constraint 제약조건명;

: 제약조건명이 c_emp_name_nn 를 삭제 하시오.
alter table c_emp drop constraint c_emp_name_nn

 

 4) 제약조건 추가하기

  - alter table 테이블명 add constraint 제약조건명 바꿀 제약조건;

  - not null 로 제약조건을 바꿈

  : alter table 테이블명 modify(필드 자료형 제약조건명(=not null);

: name에 not null 조건을 지우고 unique 조건 추가
alter table c_emp add constraint c_emp_name_un unique(name);

★ not null 제약조건은 add로 할 수 없고 modify 이용
 : name에 not null 조건 추가
alter table c_emp modify(name varcar2(25) constraint c_enp_name_nn not null);

select * from usert_constraints where table_name='C_EMP';    -- 실행을 통해 c_emp_name_nn 으로 변경 된 것을 확인 할 수 있음

 

Comments