IT 기술/Database

MySQL에서 timestamp형 컬럼에 기본값 설정하기.

ㅇㅔ ㄷㅡ 2014. 7. 23. 18:55

* MySQL 5.5.x 버전에서 테스트한 내용임!


Oracle에서는 테이블에 date형의 컬럼을 만들면서 default 값을 sysdate로 넣어주면, 명시적으로 null 값을 넣으려하거나 insert 문장에서 해당 컬럼이 빠져도 현재 시각이 입력되게 되어 있다. 이런 설정을 여러개의 컬럼에 적용할 수 있다는게 아주 당연한 일이었다. PostgreSQL도 마찬가지로 current_timestamp나 current_date 둥을 여러 컬럼에 default로 설정해 줄 수 있다.

하.

지.

만.

MySQL에서는 안된다.

DA#에서 기본값에 current_timestamp를 넣어줬더니 스크립트가 잘 뽑히길래 돌렸더니 에러 발생.

기본적으로 MySQL에서는 하나의 테이블에 하나의 timestamp 컬럼에만 current_timestamp를 넣어줄 수 있다고한다.

그러나 꼼수가 존재하니 아래 코드를 돌려보시길...


CREATE TABLE test

(

id INT NOT NULL,

regdttm TIMESTAMP DEFAULT '0000-00-00 00:00:00',

moddttm TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

)

;


INSERT INTO test(id, regdttm) VALUES(1, NULL);

INSERT INTO test(id, regdttm) VALUES(2, NULL);

INSERT INTO test(id, regdttm) VALUES(3, NULL);

regdttm에 null 값을 명시적으로 넣어주는 insert 문장을 실행하면 regdttm과 moddttm에 current_timestamp값이 들어갑니다.


SELECT * FROM test;


"id" "regdttm"                 "moddttm"

---------------------------------------------------------------

"1" "2014-07-23 17:36:05" "2014-07-23 17:36:05"

"2" "2014-07-23 18:49:52" "2014-07-23 18:49:52"

"3" "2014-07-23 17:36:24" "2014-07-23 17:37:06"