제약 조건(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(10) constraint const_id_pk primary key, passwd varchar2(13) constraint const_passwd_nn not null, age number(3) constraint const_age_ck check(age between 19 and 99), tel varchar2(20) constraint 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(30) constraint 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을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.
'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글
[SQL]계정 생성 및 삭제(oracle DB 11g) (0) | 2019.02.01 |
---|---|
[SQL]VIEW 의 기초 (0) | 2019.02.01 |
[SQL]TCL(트랜잭션 관리) 기초 (0) | 2019.02.01 |
[SQL]DML(Data Manupulation Language)의 기초 (0) | 2019.01.31 |
[SQL]DDL(Data Definition Language) 의 기초 (0) | 2019.01.31 |