- 작성시간 : 2009/05/13 14:58
- 퍼머링크 : mcchae.egloos.com/9677814
- 덧글수 : 0
뭐 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 는
버전 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' 라고 값을 명시해야 안 헷갈린다는 것이다.


덧글