MySQL에서 현재 시간 자동 입력 방법
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 이상)
댓글 남기기