🤔 의문
나는 대부분 프로젝트를 진행하면 각 DB Column 들의 제약 조건에 웬만하면 NOT NULL을 붙인다.
그러다가 DEFAULT 제약 조건을 적용할 일이 생겨서 DEFAULT를 붙이고 보니 NOT NULL과 DEFAULT가 공존했는데, 대충 봤을 때는 DEFAULT가 있는데 NOT NULL이 동작할 일이 없지 않나? 하는 의문이 들었다.
NULL은 상당히 민감한 문제이기에 NOT NULL을 제거할까 하다가 조금 더 알아보니 NOT NULL도 필요하다는 것을 알 수 있었다.
NOT NULL
NOT NULL 이란 이름 그대로 NULL 값이 들어오면 오류를 발생시킨다.
NULL 값이 들어오는 상황에는 무엇이 있을까?
- 사용자가 해당 속성의 값을 입력하지 않은 경우. ( 이는 DEFAULT 제약이 있다면 해결될 것이다. )
- 사용자가 NULL 값을 입력하는 경우. ( 이 경우가 오늘의 핵심이다. DEFAULT 제약이 동작하지 않는다. )
DEFAULT
DEFAULT는 값이 들어오지 않았을 때 오류를 발생시키는 제약이다.
이게 근데 NULL을 사용자가 직접 입력해서 데이터가 추가되는 경우에는 NULL 또한 입력이라 판단하여 동작하지 않는다.
📌 결론
DEFAULT와 NOT NULL을 모두 사용해야 값이 들어오지 않을 때 DEFAULT 값으로 데이터가 들어오고 사용자의 NULL 입력도 방지할 수 있다.
둘이 역할이 다른 것이다!