코딩하는 도로시

코딩 교육, 코딩 과학, 코딩 동화, 코딩 게임 등등! 아이부터 어른까지 모두 가능한 코딩! 함께 해보아요~~

개발메모장

SQL Contraint(제약조건)

dorosy 2014. 12. 18. 17:04

SQL 문에서 Constraint 를 지정해주는  방법은 크게 3가지가 있습니다.

다음예제를 통해 3가지 방법을 터득해봅시다^^

 

 

[ 문제 ]

-- 번호, 이름, 나이, 휴대폰번호, 전화번호로 구성된 친구 테이블을 만드시오
-- 번호는 기본키로, 이름과 휴대폰번호는 필수입력으로, 나이는20세 이상으로, 휴대폰번호는 중복불가능으로 지정하시오.

 

1. COLUMN   LEVEL

 

 

1) f_no 를 primary key로 지정한다. 이 제약 조건의 이름은 pk_f_no 로 지정하였다.

아래 결과 표를 보면 constraint_name = po_f_no 인 행의 constraint_type = p 인 것을 볼 수 있는데, p 는 primary key의 약자인 pk를 의미한다.

 

2), 4) 이름을 저장하는 f_name 과 휴대폰 번호를 저장하는 f_phone은 'not null' 제약 조건을 걸어주어 필수입력을 해야 하도록 하였다. 

 t_name에 걸린 not null 제약조건의 이름은 nn_f_name 으로 명명하였고,

t_phone에 걸린 not null 제약조건의 이름은 nn_f_phone으로 명명하였다.

 

아래 결과 표에서 해당하는 이름의 제약조건을 찾아보면 둘다 constrain_type 이 c라고 기록된 것을 볼 수 있는데, 이는 not null을 뜻하는 것이다.

 

3) 나이를 저장하는 f_age 에는 20세 이상인지 아닌지를 체크해줘야 한다는 제약조건을 걸었는데,

check가 그 명령어 이다.

 

check  제약조건 역시 결과 표의 타입은 not null과 마찾가지로 'c'로 기록된다.

 

5) 마지막으로 휴대폰 번호를 저장하는 f_phone에는 not null 제약조건 외에

'중복불가능' 이라는 제약조건을 걸어주는데,

'unique' 가 그 역할을 한다.

 

아래 결과 표에 타입은 'u' 라고 표시된다.

 

[중요!@!]

f_phone 처럼 두가지 이상의 제약조건을 걸어야 한다면,

첫번째 제약 조건과 두번째 제약 조건 사이에 '공백문자' 만을 입력해야 한다.

이 두가지 조건 사이에 ',' 라던가 ';' 등의 그어떤 문자를 입력해도 제대로 동작하지 않는다.

 

 

6)

select constraint_name, constraint_type
from USER_CONSTRAINTS
where table_name = 'FRIEND';

 

라고 명령을 내려주면,

friend 라는 이름의 테이블에 걸린 제약조건이 무엇이 있는지 나타내는 테이블이 출력된다.

 

[중요!]

3번째 줄인 where table_name = 'FRIEND'; 부분에서 table의 이름은 꼭 "대문자" 로 입력해주도록 한다.

소문자로 입력하면 결과 값이 제대로 나오지 않을 것이다

 

 

 

 

2. TABLE LEVEL

 

 

 column level 로 작업할 떄는 변수의 명칭과 타입과 크기를 결정할 때는

 제약조건도 함께 작성해주었지만,

 

table level 로 작업할 때는 각 변수의 명칭과 타입, 크기를 모두 결정해준 뒤,

제일 아랫줄에 constraint  만 따로 모아 타이핑해주도록 합니다.

 

1) pk_f_no 라는 이름의 primary key constraint 를 선정합니다.

 

이 때!! 이 constraint 가 어느 변수에 걸려 있는 것인지 컴퓨터에게 알려주기 위해

맨 뒤에 이 constraint 가 걸리는 변수 (f_no)를 명시해주어야 합니다.!!

 

3)도 마찬가지!!

 

2) 도 마찬가지이나 한가지 차이점이 있다면,

check constraint 의 경우 뒤에 조건을 명시해주는 괄호(f_age >= 20) 안에서 

이 constraint 가 걸리는 변수 f_age 가 명시되어 있기 때문에

따로 f_age 를 추가로 명시해주지 않아도 됩니다.

 

4) not null 조건의 경우 column level 로만 작업이 가능합니다!

 

5) 결과화면을 보시면 위의 coplumn level의 6번 결과화면과 같은 결과가 나왔음을 알 수 있습니다!!^^

 

 

 

 

 

 

 

3. ALTER 을 이용하여 CONSTRAINT 설정하기

 

 

alter를 이용한 방법은

이미 테이블을 생성한 후에

constraint 를 추가해야 할 경우에 주로 사용합니다.

 

1) 대부분의 제약조건의 경우 이와 같은 방법으로 추가하는데,

 

alter table (테이블이름)

add constraint (제약조건의 이름) (제약조건: primary key, check 등..) (제약조건의 대상 변수);

 

의 형식으로 나타냅니다.

 

그 중에서도 check constraint 의 경우에는 check 조건인 (f_age >= 20) 속에 변수 f_age 가 포함되어 있으므로 따로 더 추가한 필요는 없습니다.

 

 

2) 예외적으로 not null constraint 의 경우

table level 로 표현하는 것이 불가능하여, 오로지 column level로만 가능하기 떄문에,

 

add 대신에 modify를 이용하도록 합니다.

 

alter table (table 이름)

modify (제약조건의 대상변수) constraint  (제약조건의 이름)  not null;

 

3) 의 결과화면 역시 동일하게 나오는 것을 볼 수 있습니다.
 

 

 

이렇게 3가지 constraint 입력 방법 포스팅을 마무리하겠습니다.^^

 

'개발메모장' 카테고리의 다른 글

SQL 문자관련 명령어  (0) 2014.12.18
SQl 기본명령어3  (0) 2014.12.18
SQL 기본명령어2  (0) 2014.12.18
SQL 기본 명령어  (0) 2014.12.18
Oracle, sql developer 설치  (0) 2014.12.18