DATABASE(oracleDB 11g)/SQL

[SQL]제약 조건(Constraints)

SEUNGSAMI 2019. 2. 1. 14:41

제약 조건(Constraints)



제약 조건의 기본적인 종류는 다음과 같다.

primary key (pk) : 기본키이며, 이 조건이 있으면 해당 컬럼 값은 반드시 존재하고, 유일해야한다. 밑에 설명하는 not null과 unique가 결합된 형태라고 생각하면 된다.

주의할 점으로 테이블당 1개만 존재할 수 있다.

foreign key (fk) : 해당 컬럼 값이 다른 컬럼 값을 참조해야함

unique (uk) : 해당 컬럼 값은 유일해야함

not null (nn) : 해당 컬럼 값은 NULL을 허용하지 않음

check (ck) : 해당 컬럼에 저장 가능한 데이터 값의 범위나 사용자 조건을 지정

제약조건을 설정할 경우 조건에 맞춰, DML에서 값이 추가가 되거나, 안될 수 있다.


1
select * from user_constraints;
cs

를 이용해서 제약조건의 리스트를 볼 수 있다.


CONSTRAINT_TYPE은

P : 기본키 (Primary key) 

R : 외래키 (Foreign key) 

U : UNIQUE

O : With read only, on a view

C : 이외의 조건 (Check, NOT NULL)

의 종류로 구성되어있다.


테이블을 생성하며 제약조건 생성

create table 테이블명(

{컬럼명} {자료형(범위)} constraint {제약조건명} {제약조건},

.

.

.

{컬럼명} {자료형(범위)} constraint {제약조건명} {check(조건)},

);

의 형식으로 생성한다.


아래의 예시를 참고하자.

1
2
3
4
5
6
7
create table const(
id varchar2(10constraint const_id_pk primary key,
passwd varchar2(13constraint const_passwd_nn not null,
age number(3constraint const_age_ck check(age between 19 and 99),
tel varchar2(20constraint const_tel_uk unique,
address varchar2(100)
);
cs



제약조건 추가, 변경, 삭제

alter table {테이블명} {add or drop or modify} constraint {제약조건명} {제약조건}(컬럼명);

의 형식으로 사용한다.

이때 주의할 점으로는 NOT NULL조건은 제약조건추가가 아닌 제약조건변경이다.


아래 예시는 const_age_nn이라는 제약조건을 추가하는 query문이다.

1
alter table const modify age constraint const_age_nn not null;
cs


아래의 예시는 const_passwd_nn의 제약조건을 nullable로 바꾸는 query문이다.(not null의 조건을 null로 변경하는 것이다.)

1
alter table const modify passwd constraint const_passwd_nn null;
cs


만들어진 테이블에 제약조건을 추가하는 방법은

alter table {테이블명} add constraint {제약조건명} {제약조건}(컬럼명);

이다.


아래 예시는 emp_eno_pk라는 제약조건을 추가하는 query문이다.

1
alter table emp add constraint emp_eno_pk primary key(eno);
cs


아래 예시는 email 컬럼을 추가하며 동시에 제약조건을 걸어주는 query문이다.

1
alter table const add (email varchar2(30constraint const_email_uk unique);
cs


제약조건의 이름을 변경하는 방법은

alter table {테이블명} RENAME CONSTRAINTS

{예전제약조건이름} TO {새로운제약조건이름};

이다.



추가로 주의할 점은 제약조건을 변경하는 것은 바로는 불가하고, 제약조건은 지운후 다시 만들어야 가능하다.




아래 예시는 const_email_uk 라는 제약조건을 삭제하는 query문이다. 

1
alter table const drop constraint const_email_uk;
cs



제약조건을 변경하는 것은 굉장히 위험한 것으로 잘 확인하고 사용해야한다.



참조무결성은 새로운 게시글에 설명하겠습니다.



SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.