우리는 종종 여러 서비스를 이용할 때 최초 업로드 시각과 최근 갱신 시각(최근 글/댓글 수정 시각)이 따로 분류되어 있는 것을 볼 수 있습니다.
이는 DB에 데이터가 삽입 및 갱신이 될 때 자동으로 현재 시각을 자동으로 저장해주게 하면 된다. 그러면 어떻게 자동으로 작성 시각을 저장할 수 있을까?
우리는 주로 작성 날짜나 수정 날짜를 저장할때 YYYY-MM-DD HH:MM:SS 형태로 저장되는 것을 많이 보았을 것이다. 이러한 형태로 데이터를 저장해주는 것은 TIMESTAMP와 DATETIME이 있다.
TIMESTAMP는 다음과 같은 특징이 있다.
CURRENT_TIMESTAMP
를 사용하면 된다.CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
라는 쿼리문을 사용하면 된다.DATETIME은 다음과 같은 특징이 있다.
1. DATETIME은 TIMESTAMP와 달리 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 가능하다.
2. DATETIME은 문자형으로 저장된다.
3. DATETIME은 8byte로 저장된다.
4. DATETIME에는 자동으로 갱신되는 기능이 없다.
편의에 따라 어떤 타입을 사용할지 고르면 된다.
그렇다면 TIMESTAMP는 어떻게 사용할까?
회원가입을 하면 회원가입 날짜가 뜨는 것을 알 수 있다.
이는 DB에 데이터가 삽입될 때 자동으로 입력되게 하면 된다.
CREATE TABLE `테이블명`(
userID BIGINT AUTO_INCREMENT PRIMARY KEY,
id VARCHAR(30) NOT NULL,
pw VARCHAR(200) NOT NULL,
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
위와 같이 쿼리문을 입력하면 자동으로 현재 입력 시간이 들어간다.
만약 댓글같이 수정된 것을 알려주고 수정 시간을 저장하려면 어떻게 해야할까?
CREATE TABLE `COMMENTS`(
commentId BIGINT AUTO_INCREMENT PRIMARY KEY,
userId BIGINT REFERENCES Users(userId),
description TEXT NOT NULL,
createdAt TIMESTAMP DEFAULT NOT NULL CURRENT_TIMESTAMP,
updatedAt TIMESTAMP DEFAULT NOT NULL CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
로 쿼리를 짜면 된다. DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
로 하면 된다. 그렇게 되면 업데이트 된 후에도 자동으로 TIMESTAMP가 들어간다.