티스토리 뷰
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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- 제주도 3박4일 일정
- 리액트
- 프로그래머
- Linux 명령어
- 이직
- 정렬 알고리즘
- 리눅스 명령어
- 자바스크립트
- 경력관리
- spring
- Java
- 성능분석
- javascript
- React
- 제주도 여행
- 소프트웨어공학
- 오라클 내장 함수
- 프로그래머스
- SQL
- 리액트 16
- effective java
- Eclipse
- Maven
- Tomcat
- sort algorithm
- 회고
- 자바
- 개발환경
- Collection
- 오라클
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함