SQL DEFAULT 제약 조건 기본값 설정부터 삭제까지
DEFAULT 제약 조건은 SQL에서 값이 입력되지 않은 필드에 자동으로 기본값을 설정하는 기능입니다. 이를 통해 데이터 입력을 간소화하고 일관성 유지에 도움을 줍니다. 특히 대량 입력 시 누락을 방지하거나, 공통 초기값을 자동화하는 데 매우 유용합니다.
1. DEFAULT 제약 조건이란?
| 특징 | 설명 |
|---|---|
| 기본값 자동 적용 | INSERT 시 값을 생략하면 미리 지정된 기본값 저장 |
| 다양한 타입 지원 | 문자열, 숫자, 날짜, 불리언 등 사용 가능 |
| 간결한 입력 가능 | 자주 사용하는 초기값을 자동 적용하여 코드를 줄일 수 있음 |
2. DEFAULT 설정 방법
2.1. CREATE TABLE에서 설정
CREATE TABLE Test (
ID INT,
Name VARCHAR(30) DEFAULT 'Anonymous',
ReserveDate DATE DEFAULT '2025-05-03',
RoomNum INT DEFAULT 101
);
- Name:
'Anonymous'가 기본값 - ReserveDate:
'2025-05-03' - RoomNum:
101
2.2. ALTER TABLE에서 설정
✅ 새 필드 추가와 동시에 설정
ALTER TABLE Reservation
ADD Status VARCHAR(20) DEFAULT 'Pending';
✅ 기존 필드에 DEFAULT 추가
ALTER TABLE Reservation
MODIFY COLUMN Name VARCHAR(30) DEFAULT 'Anonymous';
✅ DEFAULT 설정 변경
ALTER TABLE Reservation
ALTER Name SET DEFAULT 'Guest';
3. DEFAULT 삭제 방법
ALTER TABLE Reservation
ALTER Name DROP DEFAULT;
해당 필드의 기본값 설정이 제거됩니다.
4. DEFAULT 사용 예제
✅ 생략 시 자동 적용
INSERT INTO Test (ID) VALUES (1);
| 필드 | 값 |
|---|---|
| ID | 1 |
| Name | ‘Anonymous’ |
| ReserveDate | ‘2024-01-01’ |
| RoomNum | 101 |
✅ 값이 있으면 기본값 무시
INSERT INTO Test (ID, Name) VALUES (2, 'John Doe');
| Name | 저장 값 |
|---|---|
| Name | ‘John Doe’ |
5. 실전 활용 예제
5.1. 주문 상태 관리
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
Status VARCHAR(20) DEFAULT 'Pending',
OrderDate DATE DEFAULT CURRENT_DATE
);
기본 상태는 ‘Pending’, 주문일은 자동으로 오늘 날짜 저장
5.2. 사용자 활성 여부
CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(50),
IsActive BOOLEAN DEFAULT TRUE
);
새 사용자는 기본적으로 활성화(TRUE) 상태로 등록됨
6. 주의사항 및 팁
❗ NULL과 DEFAULT
INSERT INTO Test (ID, Name) VALUES (3, NULL);
- 명시적으로
NULL을 입력하면 기본값 사용되지 않음
❗ 기본값으로 수식 사용 불가
CREATE TABLE Example (
Value INT DEFAULT (10 + 5)
);
- MySQL은 계산식·함수를 기본값으로 직접 사용 불가
✅ 기본값 변경
ALTER TABLE Orders
ALTER Status SET DEFAULT 'Completed';
7. DEFAULT 제약 조건 & 데이터 타입별 예시
| 타입 | 기본값 예제 | 설명 |
|---|---|---|
| VARCHAR | 'DefaultText' |
문자열 기본값 지정 |
| INT | 0, 100 |
숫자 기본값 지정 |
| DATE | '2025-01-01' |
특정 날짜를 기본값으로 지정 |
| BOOLEAN | TRUE 또는 FALSE |
논리형 기본값 |
| TIMESTAMP | CURRENT_TIMESTAMP |
현재 시간 저장 (서버 시각 기준) |
8. 요약
- DEFAULT는 필드에 값이 입력되지 않았을 때 자동으로 지정된 기본값을 설정합니다.
- CREATE TABLE 또는 ALTER TABLE 명령을 통해 쉽게 설정할 수 있습니다.
- 문자열, 숫자, 날짜, 시간 등 대부분의 타입에 사용 가능합니다.
- NULL을 명시적으로 입력하면 DEFAULT는 적용되지 않음에 주의해야 합니다.
- 자동 초기화가 필요한 필드(예: 상태, 날짜, 활성 여부 등)에 적극 활용하세요.
질문 정리
1. DEFAULT는 어떤 타입에 설정할 수 있나요?
→ 문자열, 숫자, 날짜, 불리언, TIMESTAMP 등 대부분의 MySQL 타입에 설정 가능합니다.
2. DEFAULT는 언제 적용되나요?
→ 해당 필드의 값을 생략한 경우에만 자동 적용됩니다.
3. NULL을 입력하면 기본값이 적용되나요?
→ ❌ 아니요. 명시적 NULL 입력 시 기본값은 무시됩니다.
4. DEFAULT로 현재 시간을 설정할 수 있나요?
→ ✅ 가능합니다. CURRENT_TIMESTAMP 또는 CURRENT_DATE 사용.
5. 기존 필드의 DEFAULT를 변경하거나 삭제하려면?
→ ALTER TABLE ... ALTER 컬럼명 SET DEFAULT ... 또는 DROP DEFAULT 구문을 사용합니다.
댓글남기기