관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

제약 조건 1 - 제약 조건의 종류와 NOT NULL, UNIQUE 제약 조건에 대하여 본문

알고리즘 및 자료 관리/데이터베이스

제약 조건 1 - 제약 조건의 종류와 NOT NULL, UNIQUE 제약 조건에 대하여

huenuri 2024. 8. 23. 16:47

오늘도 해야 할 공부가 정말 많다. 데이터베이스는 셋째마당까지만 해도 될 것 같았다. 넷째마당은 PL/SQL인데 이건 실무에서 사용하지 지금은 별로 필요가 없을 테니까. 정처기는 3과목을 다 마치고 4과목 2-1장까지는 학습하려고 한다. 그럼 오늘의 공부를 시작하러 가보자!

 

학습 목표

  1. 1시간 반 안에 학습을 마쳐보자!
  2. 수업 시간에 언급하지 않은 부분이므로 책을 통해 내용을 숙지하며 학습한다.
  3. 학습하기 전 공부에 집중할 수 있는 환경을 만들자!

 


 

 

1. 제약 조건 종류

제약 조건이란?

예를 들면 로그인에 사용할 아이디나 이메일 주소를 중복되지 않도록 설정할 수 있다. 회원 가입할 때 이름, 생년월일 등의 데이터는 필수 입력 항목으로 두어 빈값(NULL)을 허용하지 않도록 지정할 수 있다.

 

 

데이터 무결성을 보장하기 위해 오라클에서는 이 5가지 제약 조건을 제공한다. 제약 조건은 데이터베이스의 설계 시점, 즉 테이블을 생성할 때 주로 지정한다. 하지만 테이블 생성 후에도 추가 · 변경 · 삭제할 수 있다. 따라서 제약 조건은 데이터 정의어(DDL)에서 활용한다.

 

 


 

 

 

 

2. 빈값을 허락하지 않는 NOT NULL

 

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

NOT NULL은 특정 열에 데이터의 중복 여부와는 상관없이 NULL의 저장을 허용하지 않는 제약 조건이다. 반드시 열에 값이 존재해야만 하는 경우에 지정한다.

 

 

 

 

 

테이블을 생성할 때 NOT NULL 설정하기

LOGIN_ID와 LOGIN_PWD 열을 NOT NULL로 지정했다. 이 두 열은 INSERT문을 통해 신규 데이터를 삽입할 때 NULL을 입력할 경우 오류가 발생한다.

 

 

 

 

 

제약 조건이 NOT NULL인 열에 NULL 값 넣어보기

 

 

 

 

 

제약 조건이 없는 TEL 열에 NULL 값 입력하기

제약 조건이 NOT NULL인 곳에는 NULL을 넣을 수 없고, 아무런 제약 조건이 없는 곳에서는 NULL을 넣어도 상관이 없다.

 

 

 

 

 

제약 조건 확인

지정한 제약 조건 정보를 확인하려면 다음과 같은 USER_CONSTRAINTS 데이터 사전을 활용한다.

SELECT문을 사용하면 SCOTT 계정 소유의 제약 조건을 확인할 수 있다.

 

 

 

 

 

제약 조건 이름 직접 지정

TABLE_NOTNULL 테이블에 지정한 제약 조건은 이름을 따로 지정해 주지 않아 오라클에서 자동이르 이름이 지정되었다. 제약 조건에 이름을 직접 지정하려면 CONSTRAINT 키워드를 사용한다.

SYS로 시작하는 이름은 오라클에서 지정한 것이고, 내가 지정한 TBLNN2 이름이 지금 만들어졌다.

 

 

 

 

 

이미 생성한 테이블에 제약 조건 지정

앞에서 언급했듯이 원래는 DB 사용주기에서 초기에 지정하는 것이 일반적이다. 하지만 경우에 따라 이미 생성되어 있는 테이블에 제약 조건을 추가하거나 변경 또는 삭제해야 하는 경우도 종종 생긴다.

 

생성한 테이블에 제약 조건 추가하기

TEL 열 데이터 중 NULL 값이 존재하기 때문에 제약 조건이 추가되지 않는 것이다. 이렇게 제약 조건이 맞지 않으면 오류가 난다.

 

 

 

 

TEL 열 데이터 수정하기

UPDATE문으로 기존 TEL열을 NULL이 아닌 데이터로 수정했다.

 

 

 

 

 

NOT NULL 제약 조건 추가하기

마지막 행에 NOT NULL이 추가되었다.

 

 

 

 

 

생성한 테이블에 제약 조건 이름 직접 지정하여 추가하기

 

 

 

 

제약 조건 삭제

ALTER 명령어에 DROP CONSTRAINT 키워드를 사용하면 지정한 제약 조건을 삭제할 수 있다.


 

 

 

3. 중복되지 않는 값 UNIQUE

이 키워드는 열에 저장할 데이터의 중복을 허용하지 않고자 할 때 사용한다. NULL 값이 존재하지 않음을 의미하기 때문에 중복 대상에서는 제외된다. 즉 UNIUQE 제약 조건을 지정한 열에 NULL은 여러 개 존재할 수 있다.

 

 

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

 

 

 

제약 조건 확인

열 값이 U인 경우 UNIQUE 제약 조건을 의미한다.

 

 

 

 

중복을 허락하지 않는 UNIQUE

UNIQUE 제약 조건을 지정한 LOGIN_ID 열은 중복값이 저장되지 않는다.

TABLE_UNIQUE 테이블에 데이터 입력하기

행을 삽입한 후에 LOGIN_ID가 값은 값을 가진 INSERT문을 실행해보기로 하자.

 

 

 

 

 

LOGIN_ID 열에 중복되는 데이터 넣기

UNIQUE 제약 조건이 지정되어 있기에 이러한 오류가 발생한다.

 

 

 

 

 

UNIQUE 제약 조건과 NULL

열의 중복은 허용하지 않지만 NULL 저장은 가능하다. NULL은 존재하지 않는 값 또는 해당 사항이 없다는 의미로 사용되는 특수한 값이므로 NULL과 NULL을 비교했을 때 값이 같은지를 확인할 수 없다. 즉 NULL은 데이터의 중복의 의미를 부여할 수 없다.

 

UNIQUE 제약 조건이 지정된 열에 NULL 값 입력하기

이렇게 NULL이 지정되었음을 확인할 수 있다.
책에 정말 많은 예제가 있지만 반복되는 비슷한 부분이 많아 생략하고 제약 조건을 삭제하는 부분만 다루어보기로 하자.

 

 

 

 

제약 조건 삭제

제약 조건을 삭제하였다. 원래는 이 앞의 예제를 해야 삭제가 제대로 되는데 귀찮은 관계로 생략하고 이것만 실행해보았다.


 

학습을 마치고

제약 조건을 지정하고 수정 및 삭제하는 방법에 대해서 학습해보았다. NULL과 UNIQUE만 살펴보았음에도 양이 많아서 지루하기도 했다. 반복적인 예제들이 많았고 지금까지 한번쯤 보았던 명령어들이 계속 등장하고 있었다.

아직 3~4개의 키가 남아있다. 공부라는 게 재미있는 날보다는 그렇지 않은 날이 더 많을 것이다. 그래도 포기하지 말고 끝까지 가보자. 이번 시간에는 집중이 정말 잘 되지 않았다.