게시판을 만들다가 board 테이블의 title이라는 column을 설정하는데 문득 default와 not null은 비슷한 역할을 하지 않을까? 굳이 함께 써주어야 하는 이유가 있을까? 싶었다.
CREATE TABLE board (
title VARCHAR(30) NOT NULL DEFAULT "제목 없음"
);
INSERT INTO board (title) VALUES ();
위 쿼리를 실행하면 default인 "제목 없음"이 삽입된다.
INSERT INTO board (title) VALUES (NULL);
위 쿼리를 실행하면 not null 조건이 없으므로 title은 null이 된다.
즉, default는 null 값이 삽입되는 것을 막지 못한다.
INSERT INTO board (title) VALUES ();
위 쿼리에서는 default value가 없다는 오류가 발생한다.
INSERT INTO board (title) VALUES (NULL);
위 쿼리를 실행하면 not null 오류가 발생한다.
NOT NULL과 DEFAULT constraint는 중복되지 않는다.
NOT NULL과 DEFAULT를 모두 사용하면 사용자가 값을 입력하지 않은 경우에는 DEFAULT가 활성화되고, 사용자가 NULL을 입력한 경우 NOT NULL이 활성화되어 오류가 발생한다.