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 |