본문 바로가기
IT/Oracle

오라클 테이블 제약조건(Constraint) 알아보기

by flatsun 2019. 3. 4.
반응형

저번에는 테이블을 만들어 봤는데


테이블에는 제약조건(Constraint) 를 설정할 수 있다

제약조건이란 무엇인가


내가 원하는 값만 받을 수 있도록 설정하는 것을 말한다


일단 오늘도 오라클을 깔기 싫고

토드나 골든을 깔기 싫으므로 비열하게 


http://sqlfiddle.com/


이 사이트에서 온라인으로 따라해보자



왼쪽에서 테이블을 생성하고 우측에서 INSERT와 조회를 하는 식으로 사용한다


먼저 TEST라는 테이블을 만들고


NN_TEST에 NOT NULL이라고 제약조건을 걸었다


NOT NULL이란?

NN_TEST 컬럼 안에 NULL 값이 들어올 수 없다는 것!!

테이블에 값을 넣기 위해서는 반드시 NULL이 아닌 값을 넣어야 한다


위의 스크린샷처럼 NULL을 INSERT 시키면 어떻게 될까?



NOT NULL인데 NULL을 왜 넣냐고 에러가 뜬다


다음 제약조건으로 들어가자


이번에는 Primary Key인데

PK라고 어디서 많이 들어봤을 것이다



Primary key는

기본 키라고도 하는데


테이블에서 각 행들을 식별하는 기능을 한다

PRIMARY KEY라고 제약 조건을 걸면


NULL과 중복 값이 들어올 수 없다


이렇게 똑같은 값을 두번 삽입하면



짤없이 에러가 뜬다


PRIMARY KEY를 알아봤으니

이번에는 FOREIGN KEY에 대해 알아보자


Foreign key는 외래키라고도 하는데

다른 테이블에 있는 키를 가져다가 

내 테이블의 행을 식별하는데 사용하는 것이다



글자 몇개만 쓰면 끝나던 NOT NULL, PRIMARY KEY와 다르게

좀 길어서 당혹스러울 수 있는데


일단 Foreign key를 사용하려면

다른 테이블의 PK를 가져와야 하지 않겠나


그래서 테이블을 두개를 만들어야 한다


key varchar(50)을 만든 뒤

CONSTRAINT / 명칭 / PRIMARY KEY / (해당 테이블에서 KEY COLUMN 명)

이렇게 네 등분을 해야 하는데


이제 PK_COLUMN을 작성해 놓으면

다른 테이블에서 FK로 가져다 쓸 수가 있게 된다


바로 아래 테이블인 FK_TABLE에서


key 정의하고 하단에

CONSTRAINT FK_COLUMN FOREIGN KEY(key) REFERENCES PK_TABLE(key)

가 보이는데


FOREIGN KEY 오른쪽 (key) 는 FK_TABLE의 key를 FOREIGN KEY로 사용하겠다는 거고

REFERENCES PK_TABLE(key) 는


PK_TABLE의 Primary key인 key를 가져오겠다는 말이다


약간 어려울텐데


간단하게 하면

Primary key를 'PK_VAL' 로 삽입하면

FK는 'PK_VAL' 만 사용할 수 있다는거다



코드로 보면 PK_TABLE의 값을 PK_VAL만 삽입했을 경우에는

FK로 PK_VAL만 가져올 수 있다


주 키가 하나밖에 없기 떄문에..


근데 Foreign key 같은 경우에는 Primary key와 다른 것이

다른 테이블에서 주 키를 가져오고

중복과 NULL이 허용된다는 것이다


이제 난이도를 좀 낮춰서


 UNIQUE를 알아보자


UNIQUE는 면접에서 자주 물어보는 소재이기도 한데

UNIQUE와 PRIMARY KEY의 차이점은 뭘까요!? 이렇게 물어본다


UNIQUE는 중복 값은 허용하지 않지만

NULL은 허용한다!!!


끝!!


내가 이거 몰라서 면접때 통렬하게 틀렸는데 매우 간단하다


마지막으로는 CHECK를 알아보자

CHECK는 특정 값만 입력할 수 있도록 범위를 설정하는 건데



CHECK로 5 이상의 값만 입력되게 설정하고

6을 삽입할 경우에는 삽입이 아주 잘 된다



하지만 4를 삽입할 경우에는 CHECK 에서 설정한 5보다 작으므로

짤없이 에러가 나는 모습을 볼 수 있다


이렇게 제약조건을 알아봤는데

FOREIGN KEY만 처음 봤을때 약간 어렵고 나머지는 단순하므로 금방 이해할 수 있다

반응형

댓글