MySQL에서 테이블을 생성할 때 DEFAULT 제약 조건을 사용하면 특정 컬럼에 기본값을 미리 지정할 수 있습니다. 데이터 삽입 시 해당 컬럼의 값을 생략하면, 설정해 둔 기본값이 자동으로 저장되므로 매우 유용합니다.
DEFAULT 제약 조건 기본 구문
다음은 테이블을 생성하면서 DEFAULT 제약 조건을 추가해 기본값을 설정하는 기본 구문입니다.
CREATE TABLE yourTableName ( yourColumnName1 dataType not null , yourColumnName2 dataType default anyValue, . . . N );
현재 날짜를 기본값으로 하는 테이블 생성 예제
아래 예제는 "employee_joining_date"(직원 입사일) 컬럼에 DEFAULT 제약 조건을 적용하여, 별도의 값을 입력하지 않으면 CURRENT_DATE, 즉 레코드가 삽입되는 시점의 현재 날짜가 자동으로 저장되도록 테이블을 생성하는 과정을 보여줍니다.
mysql> create table demo43 -> ( -> employee_id int not null auto_increment primary key, -> employee_name varchar(40) not null, -> employee_status varchar(60) default "NOT JOINED", -> employee_joining_date date default(CURRENT_DATE) -> ); Query OK, 0 rows affected (0.66 sec)
위 테이블에는 두 가지 기본값이 설정되어 있습니다. employee_status 컬럼에는 "NOT JOINED"가, employee_joining_date 컬럼에는 CURRENT_DATE가 각각 지정되어 있습니다.
레코드 삽입하기
이제 INSERT 명령문을 사용하여 테이블에 몇 개의 레코드를 삽입해 보겠습니다. John과 David은 입사 상태와 입사일을 직접 지정했고, Bob은 이름만 입력하여 나머지 컬럼은 기본값에 맡겼습니다.
mysql> insert into demo43(employee_name,employee_status,employee_joining_date) values('John','JOINED','2020-05-10');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo43(employee_name,employee_status,employee_joining_date) values('David','JOINED','2020-10-12');
Query OK, 1 row affected (0.21 sec)
mysql> insert into demo43(employee_name) values('Bob');
Query OK, 1 row affected (0.15 sec)결과 확인하기
SELECT 문을 사용하여 테이블에 저장된 레코드를 조회합니다.
mysql> select *from demo43;
실행 결과는 다음과 같습니다.
+-------------+---------------+-----------------+-----------------------+ | employee_id | employee_name | employee_status | employee_joining_date | +-------------+---------------+-----------------+-----------------------+ | 1 | John | JOINED | 2020−05−10 | | 2 | David | JOINED | 2020−10−12 | | 3 | Bob | NOT JOINED | 2020−10−31 | +-------------+---------------+-----------------+-----------------------+ 3 rows in set (0.00 sec)
출력 결과를 보면 흥미로운 점을 확인할 수 있습니다. Bob의 레코드에는 입사일을 직접 입력하지 않았지만, DEFAULT 제약 조건에 설정된 CURRENT_DATE 덕분에 레코드가 삽입된 당시의 현재 날짜인 2020-10-31이 자동으로 저장되었습니다. 마찬가지로 employee_status 컬럼에도 값을 넣지 않았기 때문에 기본값인 "NOT JOINED"가 적용된 것을 볼 수 있습니다.
이처럼 DEFAULT 제약 조건과 CURRENT_DATE를 함께 사용하면, 날짜 정보를 매번 수동으로 입력할 필요 없이 레코드 생성 시점의 날짜를 자동으로 기록할 수 있어 실무에서 회원 가입일, 주문 일자, 로그 기록 시각 등을 관리할 때 폭넓게 활용됩니다.