티스토리 뷰

데이터베이스/SQL

[SQL] NOT NULL, DEFAULT 비교

Reference M1 2022. 8. 31. 16:39

DB 테이블 생성 시 NOT NULL, DEFAULT를 많이 접하게 된다. SQL 제약조건이 비슷하지만 각각 왜 존재하는지, NOT NULL과 DEFAULT를 동시에 사용해야 하는 건지에 대한 의문에서 시작되었다.

NOT NULL - 해당 컬럼에 NULL 값이 허용되지 않는다.
DEFAULT - 명시적으로 값을 지정하지 않으면, 지정된 값으로 설정된다.

아래 예시를 통해 이해를 돕고자 한다. DDL에 NOT NULL 제약 조건이 없다고 가정해보자.

테이블 - TBL
컬럼 - AA, BB, CC

ALTER TABLE TBL ADD COLUMN CC VARCHAR(20) DEFAULT 'Default-Value';

# 1. CC 컬럼 값을 지정하지 않음 -> 'Default-Value'
INSERT INTO TBL (AA, BB) VALUES (NULL, NULL);

# 2. CC 컬럼 값을 지정하지 않음 -> 'Default-Value'
INSERT INTO TBL (AA, BB, CC) VALUES (NULL, NULL, DEFAULT);

# 3. CC 컬럼 값을 지정하지 않음 -> 'Default-Value'
INSERT INTO TBL (AA, BB, CC) DEFAULT VALUES;

# 4. CC 컬럼 값을 NULL로 지정 -> NULL
INSERT INTO TBL (AA, BB, CC) VALUES (NULL, NULL, NULL);

# 5. CC 컬럼 값을 지정하지 않음 -> 'Default-Value'
UPDATE TBL SET CC = DEFAULT;

# 6. CC 컬럼 값을 NULL로 지정 -> NULL
UPDATE TBL SET CC = NULL;

CC 컬럼에 NOT NULL 제약 조건을 추가한다면, 4,6번 구문에서만 에러가 발생한다.

해당 제약 조건이 있는 경우의 케이스

  • NOT NULL - NULL 입력시 오류, 명시적으로 지정하지 않으면 오류
  • DEFAULT - NULL을 입력 시 NULL 값, 명시적으로 지정하지 않으면 DEFAULT
  • NOT NULL, DEFAULT - NULL 입력 시 오류, 명시적으로 지정하지 않으면 DEFAULT

NOT NULL, DEFAULT 제약 조건은 각각의 필요성이 존재하며 엄연히 다른 역할의 제약 조건을 확인할 수 있다.

'데이터베이스 > SQL' 카테고리의 다른 글

[SQL] MySQL EXPLAIN 실행 계획  (0) 2022.11.03
[SQL] MySQL DB Connection 확인  (0) 2022.11.03
[SQL] MySQL INSERT 중복(Duplicate) 처리 방법  (0) 2022.08.29
[SQL] MySQL Select 결과로 Update  (0) 2021.03.04
[SQL] Joins Tutorial  (0) 2021.02.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함