{MySQL] Timestamp 컬럼 형식을 사용할 때 주의점 Develop Tip

뭐 MySQL 메뉴얼을 보면 잘 나와있겠지만,
버전 5가 되면서 TIMESTAMP 형을 사용할 때에는 Default 값에 유의를 해야한다.

최근 DB를 처리하는데, 아래와 같은 테이블이 있다하고,

CREATE TABLE `tt`(
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
`discovered` TIMESTAMP COMMENT '발견시간',
`last_ts` TIMESTAMP COMMENT '최근탐지시간',
PRIMARY KEY(`id`))
ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

이곳에 두 개의 discovered와 last_ts 라는 timestamp를 두었다.
모두 Default 값을 두지 않았을 때, 다음과 같은 행동을 한다.

첫번째 timestamp인 discovered 는 "DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
가 자동으로 속성을 갖게되어 최초 입력할 때 값을 안 주더라도 입려된 시각이 저장되고
나중에 갱신이 되더라도 자동으로 갱신 시각이 들어간다.
하지만 두번쨰 last_ts 컬럼은 디폴트로 "0000-00-00 00:00:00" 로 되어 특정 값을 주지 않으면
값이 들어가지 않게된다.

실은 위의 discovered와 last_ts는 두번째 의미로써 이용하려는 것이었고,
초기 insert 시에 discovered와 last_ts에 모두 NOW()를 주었다.

갱신 시에 last_ts에만 현재 시각인 NOW() 를 대입했는데도,
discovered 컬럼도 동일한 갱신된 시각을 갖는 것이 위와 같은 원인 이었다.

따라서 결론은 TIMESTAMP 데이터 형을 사용할 경우에는
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
속성을 분명히 명시하던가 아니면
DEFAULT '
0000-00-00 00:00:00' 라고 값을 명시해야 안 헷갈린다는 것이다.

공유하기 버튼

 

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://mcchae.egloos.com/tb/9677814 [도움말]

덧글

댓글 입력 영역

구글애드텍스트