[MySQL] 데이터 삽입/갱신 시 현재 시각으로 자동 갱신

smlee·2022년 5월 31일
2

MySQL

목록 보기
1/6
post-thumbnail

우리는 종종 여러 서비스를 이용할 때 최초 업로드 시각과 최근 갱신 시각(최근 글/댓글 수정 시각)이 따로 분류되어 있는 것을 볼 수 있습니다.

이는 DB에 데이터가 삽입 및 갱신이 될 때 자동으로 현재 시각을 자동으로 저장해주게 하면 된다. 그러면 어떻게 자동으로 작성 시각을 저장할 수 있을까?

TIMESTAMP vs DATETIME

우리는 주로 작성 날짜나 수정 날짜를 저장할때 YYYY-MM-DD HH:MM:SS 형태로 저장되는 것을 많이 보았을 것이다. 이러한 형태로 데이터를 저장해주는 것은 TIMESTAMP와 DATETIME이 있다.

(1) TIMESTAMP

TIMESTAMP는 다음과 같은 특징이 있다.

  1. 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 UTC까지 표현 가능하다.
  2. 데이터가 저장될 때 숫자형으로 변환되어 저장되어 4byte를 차지한다.
  3. TIMESTAMP는 자동으로 입력되는 기능이 있다. CURRENT_TIMESTAMP를 사용하면 된다.
  4. TIMESTAMP는 자동으로 갱신되는 기능 역시 존재한다. CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP라는 쿼리문을 사용하면 된다.

(2) DATETIME

DATETIME은 다음과 같은 특징이 있다.
1. DATETIME은 TIMESTAMP와 달리 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 가능하다.
2. DATETIME은 문자형으로 저장된다.
3. DATETIME은 8byte로 저장된다.
4. DATETIME에는 자동으로 갱신되는 기능이 없다.

편의에 따라 어떤 타입을 사용할지 고르면 된다.


그렇다면 TIMESTAMP는 어떻게 사용할까?

1. CURRENT_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
);

위와 같이 쿼리문을 입력하면 자동으로 현재 입력 시간이 들어간다.

2. CURRENT_TIMESTAMP ON UPDATE 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가 들어간다.

0개의 댓글