Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블 열에 현재 날짜 자동으로 삽입하는 방법

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 시 해당 열을 생략해도 현재 날짜가 자동으로 기록되므로, 주문일자·등록일자처럼 생성 시점의 날짜가 필요한 열을 관리하기가 훨씬 편리해집니다.