1 분 소요

MySQL에서 현재 시간을 구해 넣으려면 NOW()를 쓴다.

INSERT INTO time_test VALUES (NOW());

원래 이 글에는 VALUES ((SELECT NOW()))라고 적었는데, 서브쿼리로 감쌀 필요 없이 함수를 바로 쓰면 된다.

2026년 수정 안내 글 끝에 “아예 컬럼 기본값으로 함수를 지정하는 방법이 있지 않을까”라고 적어두고 답을 찾지 않았는데, 방법이 있다. 이 글을 쓴 시점에도 이미 쓸 수 있었다. 아래에 정리한다.

컬럼 기본값으로 지정하기

DEFAULT CURRENT_TIMESTAMP를 쓰면 INSERT할 때 값을 넘기지 않아도 자동으로 현재 시각이 들어간다. TIMESTAMP 타입은 예전부터 지원했고, DATETIME 타입도 MySQL 5.6(2013) 부터 가능하다.

CREATE TABLE time_test (
    id          INT AUTO_INCREMENT PRIMARY KEY
,   created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
,   updated_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
                                  ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO time_test (id) VALUES (NULL);   -- created_at은 자동으로 채워진다

ON UPDATE CURRENT_TIMESTAMP를 붙이면 행이 갱신될 때마다 자동으로 시각이 갱신된다. 로그나 이력 테이블에 특히 유용하다.

DATETIME과 TIMESTAMP 중 무엇을 쓸까

로그 용도라면 이 차이를 알아둘 필요가 있다.

  DATETIME TIMESTAMP
저장 크기 5바이트 4바이트
범위 1000 ~ 9999년 1970 ~ 2038년
시간대 넣은 값 그대로 저장 UTC로 저장하고 조회 시 세션 시간대로 변환
  • 서버가 여러 시간대에 걸쳐 있거나 글로벌 서비스라면 TIMESTAMP가 편하다. 자동으로 UTC 기준이 된다.
  • 2038년 문제가 걸린다면 DATETIME을 쓰고 애플리케이션에서 UTC로 통일해 넣는다.

소수점 이하 초가 필요하면 DATETIME(3)처럼 자릿수를 지정한다. (MySQL 5.6 이상)

참고자료

댓글 남기기