MySQL에서 날짜 열에 현재 날짜와 시간을 자동으로 채우려면 NOW() 함수를 기본값(DEFAULT)으로 지정하면 됩니다. 이후 DATE() 함수를 사용하면 저장된 값에서 날짜 부분만 추출할 수도 있습니다.
기본값 설정 문법
Case 1: DATE 타입에 고정 날짜 기본값 지정
yourDateColumnName date default 'yourDateValue';
Case 2: DATETIME 타입에 현재 날짜·시간 자동 입력
yourDateColumnName datetime default now();
참고: MySQL 5.6.5 이상 버전부터 DATETIME 열에도 NOW() 또는 CURRENT_TIMESTAMP를 기본값으로 사용할 수 있으며, 그 이전 버전에서는 TIMESTAMP 열에만 적용 가능했습니다.
예제 1: NOW()를 기본값으로 사용하기
먼저 LoginDate라는 DATETIME 열에 NOW()를 기본값으로 갖는 테이블을 생성해 보겠습니다.
mysql> create table DefaultCurrentdateDemo
-> (
-> LoginDate datetime default now()
-> );
Query OK, 0 rows affected (0.59 sec)
INSERT 명령으로 레코드를 삽입합니다. 값을 전달하지 않으면 기본값인 현재 날짜와 시간이 자동으로 저장됩니다.
mysql> insert into DefaultCurrentdateDemo values();
Query OK, 1 row affected (0.18 sec)
mysql> insert into DefaultCurrentdateDemo values('2017-11-19');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DefaultCurrentdateDemo values('2018-10-21');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DefaultCurrentdateDemo values();
Query OK, 1 row affected (0.23 sec)
mysql> insert into DefaultCurrentdateDemo values('2020-12-24');
Query OK, 1 row affected (0.12 sec)
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DefaultCurrentdateDemo;
실행 결과는 다음과 같습니다.
+---------------------+
| LoginDate |
+---------------------+
| 2019-01-12 20:33:51 |
| 2017-11-19 00:00:00 |
| 2018-10-21 00:00:00 |
| 2019-01-12 20:34:37 |
| 2020-12-24 00:00:00 |
+---------------------+
5 rows in set (0.00 sec)
결과를 보면 값을 직접 입력하지 않은 첫 번째 행과 네 번째 행에는 쿼리 실행 시점의 현재 날짜와 시간(2019-01-12 20:33:51, 2019-01-12 20:34:37)이 자동으로 저장된 것을 확인할 수 있습니다.
DATETIME 값에서 날짜만 추출하기
시간 정보 없이 날짜 부분만 필요하다면 DATE() 함수를 사용하면 됩니다.
mysql> select date(LoginDate) as OnlyDate from DefaultCurrentdateDemo;
실행 결과:
+------------+
| OnlyDate |
+------------+
| 2019-01-12 |
| 2017-11-19 |
| 2018-10-21 |
| 2019-01-12 |
| 2020-12-24 |
+------------+
5 rows in set (0.00 sec)
예제 2: DATE 열에 고정 날짜 기본값 지정하기
현재 시각 대신 특정 날짜를 기본값으로 설정할 수도 있습니다.
mysql> create table DefaultDate
-> (
-> LoginDate date default '2019-01-12'
-> );
Query OK, 0 rows affected (0.53 sec)
열에 값을 전달하지 않고 INSERT 하면 지정한 기본값이 자동으로 저장됩니다.
mysql> insert into DefaultDate values();
Query OK, 1 row affected (0.13 sec)
SELECT 문으로 결과를 확인해 보겠습니다.
mysql> select *from DefaultDate;
실행 결과:
+------------+
| LoginDate |
+------------+
| 2019-01-12 |
+------------+
1 row in set (0.00 sec)
마무리 정리
- DATETIME 열에는 DEFAULT NOW()를 지정해 현재 날짜와 시간을 자동으로 입력할 수 있습니다.
- DATE 열에는 상수 날짜 문자열만 기본값으로 지정할 수 있습니다.
- DATETIME 값에서 날짜만 필요할 때는 DATE() 함수를 활용하면 됩니다.