DB Not null 과 Default 둘 다 써야 되는가?

Codren·2021년 8월 18일
1
post-custom-banner

DB Constraint Not null vs Default

  • 테이블을 선언할 때 Not null 과 Default constraint 에 대해 생긴 궁금증
  • 둘 다 써야 되는가?



궁금증 발견

  • Java Spring 에서 OracleDB 로 연동하기 위해 테이블을 생성하는 과정에서 not null 과 default constraint 이 동시에 같이 쓰이는 것을 보고, 이 둘을 굳이 같이 써야되는 필요성이 있는 것인가? 라는 궁금증이 생겨서 알아보았다.



내가 알고 있는 것

  • DB 테이블을 생성할 때, 좀 더 안정적이고 효율적으로 DATA를 저장 및 접근, 사용하기 위해서 Constraint 로 속성에 제약을 걸 수 있다.
  • NOT NULL - " 해당 속성의 값은 NULL 값이 될 수 없음 "
  • DEFAULT - " 해당 속성의 값으로 특정 값이 지정되지 않으면 설정되는 기본값 "
  • 내가 알고 있는 DB 내용을 바탕으로 DEFAULT 를 지정하면 굳이 NOT NULL 을 쓰지 않아도 되지 않나? 라고 생각했다.
ex) HIT NUMBER DEFAULT 0 NOT NULL  로 테이블 속성을 지정하면

속성 (______) 아무것도 입력하지 않으면 -> 기본값인 0 으로 설정되기 때문에 굳이 NOT NULL 이 필요없을 거라고 생각



NOT NULL 과 DEFAULT 차이점

  • DEFAULT 만을 적용했을 때의 상황 (테이블에는 NUMBER 속성만 존재한다고 가정)
ex) HIT NUMBER DEFAULT 0 

/* QUERY 1 */
INSERT INTO NOTICE (NUMBER) VALUES (NULL)

/* QUERY 2 */
INSERT INTO NOTICE (NUMBER) VALUES ()
  • 쿼리 1은 'NULL' 이라는 특정한 값을 받았다고 생각하기 때문에 아무일도 일어나지 않는다.
  • 쿼리 2는 아무런 입력도 받지 않았기 때문에 default 값은 0으로 설정된다.



내가 알게 된 것

  • NOT NULL 과 DEFAULT constraint 는 서로 중복되는 것이 아닌 각각의 필요성이 존재하는 제약이다.
  • NOT NULL 만 있는 경우: NULL 을 직접 입력하거나 아무 입력도 하지 않는 경우 모두 오류
  • DEFAULT 만 있는 경우: 특정한 값을 입력하지 않으면 default 값 지정, 'NULL' 은 하나의 특정한 입력이라고 판단
  • NOT NULL, DEFAULT 모두 있는 경우: 값을 입력하지 않는 경우에는 DEFAULT 활성화, NULL을 입력하는 경우 NOT NULL이 활성 -> 오류
post-custom-banner

0개의 댓글