데이터베이스 테이블을 설계하다 보면, 행(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가 알아서 현재 시간 관리
특별한 시간 조작이 없다면, 컬럼 속성으로 자동 관리하는 것이 가장 편리하고 실수도 줄일 수 있습니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL에서 컬럼 구조 변경하기 (ALTER TABLE 활용) (0) | 2025.08.19 |
|---|---|
| Primary Key와 Unique의 차이 (0) | 2025.08.19 |
| MySQL 생성(Create), 수정(Update/Alter), 삭제(Delete/Drop) 문법 정리 (0) | 2025.08.19 |
| MySQL에서 백틱(`), 작은따옴표(’), 큰따옴표(”)의 용도 정리 (2) | 2025.08.18 |
| SQL 상관 서브쿼리와 비상관 서브쿼리 (1) | 2025.08.18 |