development

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

big-blog 2020. 5. 13. 20:41
반응형

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

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


가장 좋은 방법은 "DEFAULT 0"을 사용하는 것입니다. 다른 방법 :

    /************ ROLE ************/
    drop table if exists `role`;
    create table `role` (
        `id_role` bigint(20) unsigned not null auto_increment,
        `date_created` datetime,
        `date_deleted` datetime,
        `name` varchar(35) not null,
        `description` text,
        primary key (`id_role`)
    ) comment='';

    drop trigger if exists `role_date_created`;
    create trigger `role_date_created` before insert
        on `role`
        for each row 
        set new.`date_created` = now();

이것은 MySQL을 사용하여 저에게 효과적이었습니다.

ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();

ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

마침내 이것은 나를 위해 일했습니다!


이것이 여전히 활성화되어 있는지 확실하지 않지만 여기에갑니다.

기본값을 Now ()로 설정하는 것과 관련하여 DATETIME 데이터 유형에 대해 가능하지 않습니다. 해당 데이터 유형을 사용하려면 다음과 같이 삽입을 수행 할 날짜를 설정하십시오.

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

My version of mySQL is 5.5


This worked for me - just changed INSERT to UPDATE for my table.

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

참고URL : https://stackoverflow.com/questions/5818423/set-now-as-default-value-for-datetime-datatype

반응형