[mysql] datetime 데이터 유형의 기본값으로 NOW ()를 설정 하시겠습니까?

테이블 사용자 registerDate and lastVisitDate에는 날짜 시간 데이터 형식으로 구성된 두 개의 열 이 있습니다. 다음을 수행하고 싶습니다.

  1. registerDate 기본값을 MySQL NOW ()로 설정
  2. lastVisitDate 기본값을 기본값 0000-00-00 00:00:00대신 사용하는 null 대신로 설정하십시오.

테이블이 이미 존재하고 기존 레코드가 있으므로 수정 테이블을 사용하고 싶습니다. 아래 두 가지 코드를 사용해 보았지만 작동하지 않습니다.

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

그것은 나에게 오류를 준다 : ERROR 1067 (42000): Invalid default value for 'registerDate'

MySQL에서 기본 날짜 시간 값을 NOW ()로 설정할 수 있습니까?



답변

MySQL 5.6.5부터는 DATETIME동적 기본값으로 유형을 사용할 수 있습니다 .

CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

또는 두 규칙을 모두 결합하십시오.

modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

참조 :
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available .html

5.6.5 이전 TIMESTAMP에는 레코드가 수정 될 때마다 자동으로 업데이트되는 데이터 유형 을 사용해야합니다 . 그러나 불행히도 TIMESTAMP테이블 당 하나의 자동 업데이트 필드 만 존재할 수 있습니다.

CREATE TABLE mytable (
  mydate TIMESTAMP
)

참조 : http://dev.mysql.com/doc/refman/5.1/en/create-table.html

MySQL이 타임 스탬프 값을 업데이트하지 않도록하려면 UPDATE(트리거 만 트리거되도록 INSERT) 정의를 다음과 같이 변경할 수 있습니다.

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)


답변

새 삽입에 대해 날짜 시간 필드를 NOW ()로 설정하는 방법으로 트리거를 사용합니다.

CREATE TRIGGER `triggername` BEFORE INSERT ON  `tablename` 
FOR EACH ROW 
SET NEW.datetimefield = NOW()

업데이트도 가능합니다.

Johan & Leonardo의 답변에는 타임 스탬프 필드로 변환이 포함됩니다. 이 질문에 제시된 사용 사례 (RegisterDate 및 LastVisitDate 저장)에는 문제가 없지만 범용 솔루션은 아닙니다. 날짜 시간 대 타임 스탬프 질문을 참조하십시오 .


답변

내 솔루션

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;


답변

유레카 !!!


MySQL에서 기본 DATETIME 값 을 설정하려고하는 마음을 잃은 모든 사람들에게 , 나는 당신이 어떻게 느끼고 느끼는지 정확하게 알고 있습니다. 그래서 여기 있습니다 :

`ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

0 주위 에 작은 따옴표 / 큰 따옴표를 추가하지 않았 음을주의 깊게 관찰 하십시오 .


중요 업데이트 :

이 답변은 오래 전 게시되었습니다. 그 당시에는 MySQL의 (아마도 최신) 설치에서 작동했으며 공유하고 싶어했습니다. 이 솔루션을 지금 사용하기로 결정하기 전에 아래 의견을 읽으십시오.


답변

mysql 5.6 문서에 따르면 CURRENT_TIMESTAMP는 TIMESTAMP 및 DATETIME 데이터 유형 모두에 대해 기본값으로 사용할 수 있다고 말합니다.

http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html


답변

mysql 5.6.5 이상 버전에서는 정확한 날짜 시간을 사용하고 기본값도 설정할 수 있습니다. 미묘한 비트가 있지만 정밀도 값을 datetime 및 NOW () 함수 호출 모두에 전달해야합니다.

이 예제는 작동합니다 :

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW(6);

이 예제는 작동하지 않습니다 :

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW();


답변

`ALTER TABLE  `table_name` CHANGE `column_name`
    timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ON UPDATE CURRENT_TIMESTAMP

업데이트시 타임 스탬프를 업데이트하는 데 사용할 수 있습니다.