컴퓨터 과학/데이터 베이스

MySQL에서 행의 생성/갱신 시각 관리하기

Data Jun 2025. 8. 19. 11:52

데이터베이스 테이블을 설계하다 보면, 행(row)이 언제 생성되었는지, 마지막으로 언제 수정되었는지를 기록해야 할 때가 많습니다.
예를 들어:

  • 게시글 업로드 시각
  • 댓글 작성 시각
  • 댓글 수정 시각

이런 정보를 컬럼에 자동으로 저장하는 방법에는 크게 두 가지가 있습니다.

 

NOW() 함수 사용하기

NOW() 함수는 SQL 실행 시점의 현재 시간을 반환합니다.

예시 테이블:

CREATE TABLE post (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100),
    content TEXT,
    upload_time DATETIME,
    recent_modified_time DATETIME
);

게시글 추가 시:

INSERT INTO post (title, content, upload_time, recent_modified_time)
VALUES ('첫 번째 글', '안녕하세요!', NOW(), NOW());

게시글 수정 시:

UPDATE post
SET content = '수정된 내용입니다.'
	recent_modified_time = NOW()
WHERE id = 1;

장점: 원하는 방식대로 자유롭게 시간 값을 조작할 수 있습니다.
단점: 매번 쿼리에 NOW()를 직접 써야 합니다.

 

DEFAULT CURRENT_TIMESTAMP / ON UPDATE CURRENT_TIMESTAMP 속성 사용하기

MySQL에서는 DATETIME 또는 TIMESTAMP 타입 컬럼에 특별한 속성을 줄 수 있습니다.

CREATE TABLE post (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100),
    content TEXT,
    upload_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    recent_modified_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
  • DEFAULT CURRENT_TIMESTAMP : 새 row 추가 시 현재 시간이 자동 저장됨
  • ON UPDATE CURRENT_TIMESTAMP : 해당 row가 갱신될 때마다 현재 시간으로 자동 갱신됨

사용 예시:

INSERT INTO post (title, content)
VALUES ('두 번째 글', '자동 시간 기록 테스트');

upload_time과 recent_modified_time은 값을 지정하지 않아도 자동으로 현재 시각이 들어갑니다.

게시글 내용 수정 시:

UPDATE post
SET content = '내용이 수정되었습니다.'
WHERE id = 2;

recent_modified_time이 자동으로 갱신됩니다.

 

언제 어떤 방법을 쓸까?

  • 각 행마다 특별한 시간 계산이 필요할 때
    (예: 특정 row는 NOW() + INTERVAL 3 HOUR, 또 다른 row는 NOW() - INTERVAL 5 HOUR)
    NOW() 함수 직접 사용
  • 단순히 생성/수정 시각만 기록하면 될 때
    DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP 속성 활용

정리

  • NOW() : SQL 구문 안에서 직접 현재 시간을 넣어주는 방식
  • DEFAULT CURRENT_TIMESTAMP / ON UPDATE CURRENT_TIMESTAMP : DBMS가 알아서 현재 시간 관리

특별한 시간 조작이 없다면, 컬럼 속성으로 자동 관리하는 것이 가장 편리하고 실수도 줄일 수 있습니다.