Welcome! Everything is fine.

[MySQL] NULL과 NOT NULL, DEFAULT 설정하기 본문

MySQL

[MySQL] NULL과 NOT NULL, DEFAULT 설정하기

개발곰발 2024. 10. 2.
728x90

 

Udemy 강의 <실무 활용 중심의 MySQL 부트캠프> 강의를 보고 실습한 내용입니다.


 

NULL과 NOT NULL

NULLNOT NULL에 대해 알아보자! 기존에 있던 cats 테이블의 구조를 보면 Null이 모두 YES로 되어있다. 그렇다면 name이 NULL이거나 age가 NULL이거나, 혹은 둘 다 NULL이어도 데이터가 잘 들어갈 것이다.

 

아래와 같이 name만 넣고 age를 비워둔채 데이터를 삽입해보았다. 정상적으로 삽입되었고, cats 테이블 전체를 보니 방금 넣은 Todd라는 이름이 age가 NULL인채 들어가 있는 것을 볼 수 있다. 나이를 비워두고 삽입해도 같은 결과를 얻을 것이다.

 

하지만 데이터를 넣을 때 NULL을 허용하지 않기를 원한다면? 테이블을 생성할 때 컬럼에 NOT NULL 속성을 입력해주면 된다. 아래와 같이 cat2 테이블을 만들었는데, 이번에는 name과 age 모두 NOT NULL 속성을 가지도록 입력해주었다.

 

cats2 테이블의 컬럼 속성을 살펴보면 cat 테이블 컬럼과 달리 Null이 모두 NO로 되어있는 것을 볼 수 있다. 그렇다면 이제 데이터를 삽입할 때 NULL을 넣으려고 하면 에러가 날 것이다. 

 

첫 번째 줄을 보면 age를 비워둔채 name만 넣으려고 시도했더니 Field 'age' doesn't have a default value 라는 에러가 났다. 여기서 알 수 있는 점은? DEFAULT를 설정하면 같은 상황에서 정상적으로 작동할 것이다! 세 번째 줄에서 name과 age 모두 넣었더니 정상적으로 삽입되는 것을 볼 수 있다.

DEFAULT

이번에는 DEFAULT를 각각 'unnamed', 99라고 설정해준 후 cat3 테이블을 만들었다. 그리고나서 age만 넣었더니 에러가 나지 않고 정상적으로 들어간 것을 볼 수 있다. name은 입력된 값이 없으므로 DEFAULT로 설정했던 'unnamed'가 들어갔다.

 

name과 age 둘 다 입력하지 않으면 DEFAULT로 설정된 값이 각각 들어간 것을 볼 수 있다.

 

물론 NOT NULL로 설정하지 않았으니 NULL 값도 넣을 수 있다.