[mysql] datetime 데이터 유형의 기본값으로 NOW ()를 설정 하시겠습니까?
테이블 사용자 registerDate and lastVisitDate
에는 날짜 시간 데이터 형식으로 구성된 두 개의 열 이 있습니다. 다음을 수행하고 싶습니다.
- registerDate 기본값을 MySQL NOW ()로 설정
- 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
업데이트시 타임 스탬프를 업데이트하는 데 사용할 수 있습니다.