MySQL에서는 CURDATE() 함수와 NOW() 함수를 활용하면 테이블의 특정 열에 현재 날짜를 손쉽게 자동 삽입할 수 있습니다.
CURDATE()와 NOW()의 차이
두 함수 모두 현재 날짜를 반환하지만 반환 형식에 차이가 있습니다.
- CURDATE() : 날짜만 반환합니다. (예: 2017-10-28)
- NOW() : 날짜와 시간을 함께 반환합니다. (예: 2017-10-28 12:34:56)
따라서 대상 열의 데이터 타입이 DATE라면 NOW()로 값을 삽입할 때 시간 부분은 잘려나가고 날짜만 저장되며, 이 경우 경고(warning)가 발생할 수 있습니다.
실습 예제
year_testing 테이블의 OrderDate 열에 현재 날짜를 자동으로 삽입하려면 다음과 같이 쿼리를 작성하면 됩니다.
mysql> Insert into year_testing (OrderDate) Values(CURDATE()); Query OK, 1 row affected (0.11 sec) mysql> Select * from year_testing; +------------+ | OrderDate | +------------+ | 2017-10-28 | +------------+ 1 row in set (0.00 sec)
이번에는 NOW() 함수를 사용해 값을 삽입해 보겠습니다.
mysql> Insert into year_testing (OrderDate) Values(NOW()); Query OK, 1 row affected, 1 warning (0.12 sec) mysql> Select * from year_testing; +------------+ | OrderDate | +------------+ | 2017-10-28 | | 2017-10-28 | +------------+ 2 rows in set (0.00 sec)
참고: INSERT 없이 자동으로 날짜 입력하기
매번 INSERT 문에서 직접 함수를 지정하는 것이 번거롭다면, 테이블 생성 시 해당 열의 기본값(DEFAULT)을 설정하는 방법도 있습니다.
- DATETIME 또는 TIMESTAMP 타입이라면
DEFAULT CURRENT_TIMESTAMP를 지정할 수 있습니다. - MySQL 8.0.13 이상에서는 DATE 타입에도
DEFAULT (CURDATE())처럼 표현식 기본값을 사용할 수 있습니다.
이렇게 설정해 두면 INSERT 시 해당 열을 생략해도 현재 날짜가 자동으로 기록되므로, 주문일자·등록일자처럼 생성 시점의 날짜가 필요한 열을 관리하기가 훨씬 편리해집니다.